2010-07-29 25 views
3

假设我有这样的要求:现有的细粒度访问控制库/框架?

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

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

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

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

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

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

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

随时挑战我的假设。

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

但是在我把它带到下一个级别并构建这个野兽之前,我想知道是否有人知道一个已被广泛接受的系统,模块或库(不一定是.NET),它已经帮助开发者实现对实体的这种细粒度控制(无论这意味着数据库记录还是ORM中的对象或其他)。

P.W.在发布到SO之前,在回顾答案之前,我在别处找到了一个答案(SO LINK),表明Zend_Acl可能具有LAMP项目的这种能力,但是我更喜欢.NET/Windows解决方案。

回答

1

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

AzMan完全是石头,但其文档留下了一些不尽人意的地方。

0

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

+0

我看到了犀牛安全,但我没有使用NHibernate,它看起来像犀牛安全只为此构建。如果那是真的,那对我所要做的事来说不是通用的。我错了吗? – 2010-07-30 02:30:41