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

.net 现有细粒度访问控制库/框架?,.net,security,access-control,.net,Security,Access Control,假设我有这样的要求: 角色AA中的用户A需要能够更新A1类型的所有实体 角色BB中的用户B需要能够仅使用主标识符“2”(我称之为A1(“2”)更新A1类型的实体,并且不能更新A1类型的任何其他实体,但可以向实体A1(“2”)添加或删除B2类型的任意数量的子实体 角色CC中的用户C需要能够编辑属于实体A1(“2”)的这些子B2实体的大部分但不是全部属性,角色CC的成员也不能从A1(“2”)中添加或删除B2实体 用户D处于角色BB和角色CC中,并且作为组合成员身份的结果,具有从两组权限的并集派生的权

假设我有这样的要求:

角色AA中的用户A需要能够更新A1类型的所有实体

角色BB中的用户B需要能够仅使用主标识符“2”(我称之为A1(“2”)更新A1类型的实体,并且不能更新A1类型的任何其他实体,但可以向实体A1(“2”)添加或删除B2类型的任意数量的子实体

角色CC中的用户C需要能够编辑属于实体A1(“2”)的这些子B2实体的大部分但不是全部属性,角色CC的成员也不能从A1(“2”)中添加或删除B2实体

用户D处于角色BB和角色CC中,并且作为组合成员身份的结果,具有从两组权限的并集派生的权限(在本例中,由于角色CC权限是角色BB的适当子集,这意味着用户D可以执行角色BB允许的所有操作)

等等。这些策略可能在部署后更改,因此不需要进行重大的重新开发工作来实现更改(例如,解决此问题的声明性方法可能需要什么)

我假设访问控制列表(ACL)将存储在受保护对象的旁边或内部

我假设编写代码的开发人员需要能够强制(而不是声明式)查询单个方法/函数/操作/过程,并使用参数标识当前主体、考虑中的对象和考虑中的操作(可能我们称之为特权),然后检索一个布尔值,该值指示应允许还是拒绝该操作

请随意挑战我的假设

现在,我已经有了一个简单而有效的专有通用解决方案(基于我已经投入生产的工作,并且工作得很好)。我正在考虑将其作为一个开源项目发布

但在我将其提升到下一个级别并构建这个beastie之前,我想知道是否有人知道一个广泛接受的系统、模块或库(不一定是.NET),它已经帮助开发人员实现了对实体的这种细粒度控制(无论是指ORM中的数据库记录或对象还是其他)


另外,在把这篇文章发布到SO之前,我在其他地方找到了一个答案(),表明Zend_Acl可能对LAMP项目具有这种功能,但我更喜欢.NET/Windows解决方案。

值得一看。可能会改变你的假设

原来我需要的东西(不知道为什么我以前没有看到)是Windows AzMan。我花了一点时间才弄明白如何实现可继承ACL之类的功能,但通过创造性地使用作用域,我有了一个非常易于管理、灵活且快速的系统


AzMan非常棒,但是它的文档还有一点不尽如人意。

我看过Rhino Security,但我没有使用NHibernate,而且Rhino Security似乎只是为此而构建的。如果这是真的,那么对于我正在尝试做的事情来说,它还不够通用。我弄错了吗?