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