现有的细粒度访问控制库/框架?

3
假设我有以下要求:
角色AA中的用户A需要能够更新所有类型为A1的实体。
角色BB中的用户B需要能够更新仅具有主标识符“2”的类型为A1的实体,我将其称为A1(“2”),并且不能更新任何其他类型为A1的实体,但可以添加或删除任意数量的子实体B2到实体A1(“2”)。
角色CC中的用户C需要能够编辑这些子实体B2的大部分但不是全部属性,也不能在成员CC中添加或删除B2实体到A1(“2”)。
用户D属于角色BB和角色CC,因此由两组权限的联合派生权限(在这种情况下,因为角色CC权限是角色BB的真子集,这意味着用户D可以执行允许角色BB的所有操作)。
等等。这些策略可能在部署后更改,因此不应要求进行重大重新开发以实现更改(例如解决此问题的声明性方法可能需要的内容)。
我认为访问控制列表(ACL)将存储在被保护对象旁边或内部。
我假设编写代码的开发人员需要能够命令式(而非声明式)查询单个方法/函数/操作/过程,并使用标识当前主体、正在考虑的对象、正在考虑的操作(也许我们将其称为特权)的参数,然后检索一个布尔值,指示是否允许或拒绝操作。
请随意挑战我的假设。
现在,我已经有一个简单但有效的专有通用解决方案(基于我已经提交到生产并且运行得非常好的工作)。我正在考虑将其发布为开源项目。
但是,在我将其带到下一个级别并构建这个野兽之前,我想知道是否有人知道一个广泛接受的系统、模块或库(不一定要是.NET),可以帮助开发人员实现对实体的这种细粒度控制(无论这是否意味着数据库记录或ORM中的对象等)。
P.W.在将此发布到SO之前查看答案时,我在其他地方找到了一个答案(SO LINK),表明Zend_Acl可能具有LAMP项目的这种功能,但我更喜欢.NET / Windows解决方案。
2个回答

1
原来我需要的东西(不知道为什么以前没看到)是 Windows AzMan。花了一点功夫才弄清楚如何创建可继承的 ACL,但是通过一些范围的创造性使用,我有了一个相当易于管理、灵活且快速的系统。
AzMan 真的很棒,但它的文档还有待改进。

0

我看到了Rhino Security,但我没有使用NHibernate,而且似乎Rhino Security只是为此构建的。如果是这样,它对于我尝试做的事情来说并不通用。我错了吗? - Alan McBee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接