我正在使用存储库模式使用NHibernate查询我们的数据库。这样做很容易:
public T GetById(int id){...}
但是当有人开始用查询字符串查看他们不允许的内容时,这并没有多大帮助。
为了使它复合,一些对象是父对象的深层嵌套子对象,应该对其执行授权。
例如博客 - >作者 - >发布 - >评论。在这个人为的例子中,我们想让作者能够在这些帖子上编辑自己的帖子和评论,但不能看到或编辑其他作者的帖子和评论。检查帖子属于作者很容易,确保评论属于作者要困难一些。我们有一些更深入的实例。
那么......我们如何进行授权(在模型或存储库中)?
答案 0 :(得分:1)
您可以实现装饰器模式 - 我假设您正在使用DP / IoC容器来注入您的IRepositories?
您将创建一个ISecureRepository,用于检查所做的调用是否对特定用户/请求类型有效,然后将调用传递回IRepository。这也使您能够调用该方法,然后检查返回类型...
然后你设置你是IoC来使用一个包含IRepository的ISecureRepository ......
听起来很简单......
答案 1 :(得分:0)
这可能是满足您需求的良好实现:http://www.codeproject.com/KB/web-security/objectlevelsecurity.aspx,它是基于ACL的模型。