2

我正在使用存储库模式使用 NHibernate 查询我们的数据库。它使执行以下操作变得非常容易:

公共 T GetById(int id) {...}

但是当有人开始使用查询字符串来查看他们不允许看到的东西时,这并没有多大帮助。

为了复合它,一些对象是应该对其执行授权的父对象的深层嵌套子对象。

例如博客 --> 作者 --> 帖子 --> 评论。在这个人为的示例中,我们希望作者能够编辑他们自己的帖子和对这些帖子的评论,但不能查看或编辑其他作者的帖子。检查帖子属于作者很容易,确定评论属于作者就有点困难了。我们有一些更深入的例子。

那么......我们如何进行授权(在模型或存储库中)?

4

2 回答 2

1

您可以实现装饰器模式 - 我假设您正在使用 DP/IoC 容器来注入您的 IRepositories?

您将创建一个 ISecureRepository 来检查所进行的调用对于特定用户/请求类型是否有效,然后将调用传递回 IRepository。这也使您能够调用该方法,然后检查返回类型...

然后,您将设置您的 IoC 以使用包裹在 IRepository 周围的 ISecureRepository ...

听起来很简单...

于 2008-11-20T14:37:08.833 回答
0

这可能是满足您需求的一个很好的实现:http: //www.codeproject.com/KB/web-security/objectlevelsecurity.aspx,它是一个基于 ACL 的模型。

于 2009-02-26T02:04:26.167 回答