有谁知道一些与建立分层用户帐户系统相关的好资源?我目前正在设置一个,并且正在努力处理一些更复杂的逻辑(尤其是在确定权限方面)。我希望我能找到一些资源来帮助我。
一些背景: 我正在为允许嵌套组层次结构的 Web CMS 构建用户帐户系统。可以允许/拒绝每个组对读取、写入、添加和删除的访问(明确地针对该组,或者由其父组之一隐式地)。好像这还不够复杂,该系统还允许用户成为多个组的成员。——这就是我卡住的地方。我已经完成了所有设置,但我正在为确定给定用户的权限的实际逻辑而苦苦挣扎。
有谁知道一些与建立分层用户帐户系统相关的好资源?我目前正在设置一个,并且正在努力处理一些更复杂的逻辑(尤其是在确定权限方面)。我希望我能找到一些资源来帮助我。
一些背景: 我正在为允许嵌套组层次结构的 Web CMS 构建用户帐户系统。可以允许/拒绝每个组对读取、写入、添加和删除的访问(明确地针对该组,或者由其父组之一隐式地)。好像这还不够复杂,该系统还允许用户成为多个组的成员。——这就是我卡住的地方。我已经完成了所有设置,但我正在为确定给定用户的权限的实际逻辑而苦苦挣扎。
CakePHP 的手册很好地描述了访问控制列表是如何工作的。
http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html
将给定组的权限集表示为位掩码。或将位掩码组合在一起将为您提供最终的权限集。
@Alex 更新:
我在 3 年前写了这个答案,但我相信我是在暗指以下内容......
从问题
嵌套组层次结构。可以允许/拒绝每个组对读取、写入、添加和删除的访问(明确地针对该组,或者由其父组之一隐式地)。好像这还不够复杂,该系统还允许用户成为多个组的成员。——这就是我卡住的地方。我已经完成了所有设置,但我正在为确定给定用户的权限的实际逻辑而苦苦挣扎。
分配与系统中组(或角色)的总权限集匹配的位掩码:
例如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)
我不知道提问者系统的细节,但可以扩充这里概述的系统,以使用不同的逻辑运算符实现不同的组组合行为。
查看Andrew File System中的权限。它允许用户创建和管理他们自己的组,同时有选择地分配管理员权限和 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 服务器内的 XML 列中来完成此操作。XML 将有一个称为“权限”的元素,然后权限实际上是代码中的 ENUM。每个权限都是 SecurityPermission 类的一个新实现(上面链接) 用户被绑定到 SQL 服务器中定义的组,然后当用户被添加/删除到组时,XML 文档将被更新以反映他们分开的组的。
用户登录后,用户凭据将被加载到应用程序商店(会话)中,然后将被相应地访问。当需要进行授权时,应用商店中的 XMl 将通过“FromXML”方法被下拉加载到 SecurityPermission 中。那时我会使用以下方法来确定用户是否有权限:
等等等等等等。
在执行需求之后,我能够根据我在 SecurityPermissions 中实现安全例程的方式来确定调用者是否具有访问权限。
同样,这遗漏了很多细节,但这应该会让你走上正确的道路。
看看这个名称空间:[2]:http: //msdn.microsoft.com/en-us/library/system.security.permissions.aspx "System.Security.Permissions"