假设我有以下要求:
角色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解决方案。
角色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解决方案。