2

有谁知道一些与建立分层用户帐户系统相关的好资源?我目前正在设置一个,并且正在努力处理一些更复杂的逻辑(尤其是在确定权限方面)。我希望我能找到一些资源来帮助我。

一些背景: 我正在为允许嵌套组层次结构的 Web CMS 构建用户帐户系统。可以允许/拒绝每个组对读取、写入、添加和删除的访问(明确地针对该组,或者由其父组之一隐式地)。好像这还不够复杂,该系统还允许用户成为多个组的成员。——这就是我卡住的地方。我已经完成了所有设置,但我正在为确定给定用户的权限的实际逻辑而苦苦挣扎。

4

4 回答 4

3

CakePHP 的手册很好地描述了访问控制列表是如何工作的。

http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

于 2008-09-16T18:34:27.487 回答
2

将给定组的权限集表示为位掩码。或将位掩码组合在一起将为您提供最终的权限集。

@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)

我不知道提问者系统的细节,但可以扩充这里概述的系统,以使用不同的逻辑运算符实现不同的组组合行为。

于 2009-01-19T15:48:23.043 回答
1

查看Andrew File System中的权限。它允许用户创建和管理他们自己的组,同时有选择地分配管理员权限和 ACL。您可能会发现他们的模型中已经为您解决了许多令人讨厌的细节。

编辑:这是 AFS 文档的更好链接:

http://www.cs.cmu.edu/~help/afs/index.html

这是关于组的部分:

http://www.cs.cmu.edu/~help/afs/afs_groups.html

于 2008-09-16T18:31:43.280 回答
1

我以前就做过这个,而且它的实现并不简单。您将要查看 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"

于 2008-09-16T18:39:53.497 回答