题
有谁知道一些与设置分层用户帐户系统相关的好资源?我目前正在设置一个,并正在努力解决一些更复杂的逻辑(尤其是确定权限)。我希望我能够找到一些资源来帮助我。
一些背景:我正在为允许嵌套组层次结构的 Web CMS 构建用户帐户系统。可以允许/拒绝每个组的读、写、添加和删除访问权限(无论是对该组明确的,还是由其父组之一隐式的)。好像这还不够复杂,系统还允许用户成为多个组的成员。——这就是我被困住的地方。我已经完成了所有设置,但我正在努力解决确定给定用户权限的实际逻辑。
解决方案
CakePHP 手册对访问控制列表的工作原理有很好的描述。
http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html
其他提示
将给定组的权限集表示为位掩码。将位掩码进行“或”运算即可得到最终的权限集。
@Alex 的更新:
我三年前写了这个答案,但我相信我是在暗示以下内容......
从问题来看
嵌套的组层次结构。可以允许/拒绝/拒绝访问阅读,写作,添加和删除(要么明确针对该组,要么由其中一个父母隐式)。好像这还不够复杂,该系统还允许用户成为多个组的成员。——这就是我被困住的地方。我已经设置了所有内容,但是我正在为确定给定用户的脾气的实际逻辑而苦苦挣扎。
分配与系统中组(或角色)的总权限集匹配的位掩码:
例如 00
(这里使用两位可以让事情变得简单!)
第一个位赋予 Permission A
和第二个 Permission B
.
现在假设 A 组授予以下权限集: 01
.
...并假设 B 组授予以下权限集: 10
.
要获取任意一组组中用户的最终权限集,您可以执行逻辑 OR
关于权限集位掩码:
Permission set for Group A 01
Permission set for Group B 10 OR
----
Resultant permission set 11 (i.e. both permission A and B are conferred)
我不知道提问者系统的细节,但是可以扩展此处概述的系统,以使用不同的逻辑运算符实现不同的组组成行为。
查看里面的权限 安德鲁文件系统. 。它允许用户创建和管理自己的组,同时有选择地分配管理权限和 ACL。您可能会发现许多烦人的细节已经在他们的模型中为您解决了。
编辑: 这是 AFS 文档的更好链接:
http://www.cs.cmu.edu/~help/afs/index.html
这是关于组的部分:
我以前就做过这样的事情,而且它的实现并不简单。您将需要查看 SecurityPermission 类。
[http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]
我之前已经通过使用 XML(我不确定是否会再次这样做)并通过 CLR 存储过程将该 XML 作为权限列表存储在 SQL Server 内的 XML 列中来完成此操作。XML 将有一个称为“权限”的元素,然后该权限实际上是代码内部的 ENUM。每个权限都是 SecurityPermission 类(上面链接)的新实现。用户被绑定到 SQL Server 中定义的组,然后当用户添加/删除到组时,XML 文档将更新以反映他们所属的组的。
用户登录后,用户凭据将被加载到应用程序商店(会话)中,然后进行相应的访问。当需要进行授权时,应用程序商店中的 XMl 将通过“FromXML”方法下拉加载到 SecurityPermission 中。此时我将使用以下方法来确定用户是否有权限:
- 要求
- 相交
- 联盟
- 不受限制
- 是子集
等等等等
在执行需求后,我能够根据我在 SecurityPermissions 中实现安全例程的方式来确定调用者是否具有访问权限。
同样,这遗漏了大量细节,但这应该会让您走上正确的道路。
也看一下这个名称空间:[2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx “系统.安全.权限”