我正在使用存储库模式使用NHibernate查询我们的数据库。这样做很容易:

public T GetById(int id){...}

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

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

例如博客 - <!> gt;作者 - <!> gt; post - <!> gt;评论。在这个人为的例子中,我们想让作者能够在这些帖子上编辑自己的帖子和评论,但不能看到或编辑其他作者的帖子和评论。检查帖子属于作者很容易,确保评论属于作者要困难一些。我们有一些更深入的实例。

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

有帮助吗?

解决方案

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

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

然后你设置你是IoC来使用一个包含IRepository的ISecureRepository ......

听起来很简单......

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top