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

时间:2010-07-29 00:09:33

标签: .net security access-control

假设我有这样的要求:

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

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

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

用户D位于角色BB和角色CC中,并且作为组合成员资格的结果,具有从两组权限的联合派生的权限(在这种情况下,因为角色CC权限是角色的正确子集BB,这意味着用户D可以完成角色BB的所有允许。

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

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

我认为编写代码的开发人员需要能够命令性地(不是声明性地)查询单个方法/函数/操作/过程,其中参数标识当前主体,正在考虑的对象,正在考虑的操作(可能我们称之为特权),然后检索一个布尔值,指示是允许还是拒绝操作。

随意挑战我的假设。

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

但是在我把它提升到一个新的水平并构建这个野兽之前,我想知道是否有人知道一个广泛接受的系统,模块或库(不一定是.NET)已经帮助开发人员实现这种对实体的细粒度控制(无论是ORM中的数据库记录还是对象等)。

P.W。在将答案发布到SO之前回顾答案时,我在其他地方找到了答案(SO LINK),表明Zend_Acl可能具有LAMP项目的这种功能,但我更喜欢.NET / Windows解决方案。

2 个答案:

答案 0 :(得分:1)

原来我需要的东西(不知道为什么我之前没有看到它)是Windows AzMan。花了一些工作来弄清楚如何做一些可继承的ACL,但是通过一些创造性的范围使用,我有一个非常易于管理,灵活,快速的系统。

AzMan完全摇滚,但它的文档有点不尽如人意。

答案 1 :(得分:0)

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