3

我仍在从事我的 ACL 项目,我想对以下问题提出一些想法:

我使用 MySQL 来存储我的用户、角色和权限。起初,我在我的 TABLE Roles 中创建了一个字段“parent_id”,并试图通过它来管理每个用户的权限。这是一种工作,直到我意识到如果我添加一个新角色,管理层次结构和控制谁可以访问哪个资源真的很复杂。我做了一些搜索,我意识到使用关系数据库来处理层次结构真的很复杂,所以我放弃了使用层次结构。

我希望您能帮助我找到管理用户创建的最佳解决方案:我有 4 个不同的用户:SuperAdmin、CustomerAdmin、技术员、客户。例如,当我在页面中创建新用户时,我不想让技术人员创建类型为 CustomerAdmin 或 SuperAdmin 的新用户。

我想只让超级管理员创建一个新用户,但我的一个限制是我必须让客户管理员也创建用户,也是技术人员。

试图更具说教性,超级管理员可以是我。客户管理员是我的客户,他有一个企业。在他的企业中,他可以创建 2 类用户:技术人员和客户。

这只是一个例子,但是如果我想创建一种新的角色来赋予他新的权限,我必须找到一种方法来拒绝他创建一个比他更强大的用户的权限。

我不确定我的问题是否客观,但欢迎任何可以与我谈论这个问题的人。

4

2 回答 2

5

您已经拥有自己的角色,但每个角色都需要拥有执行操作的权限。这几乎可以肯定是矫枉过正,但它应该是高度灵活的。

| 角色表 |
 | 角色 ID | 角色名称 | 访问级别 |
 --------------------------------------
 | 1 | 超级管理员 | 10 |
 | 2 | 客户管理 | 20 |
 | 3 | 技术员 | 40 |
 | 4 | 客户 | 80 |

 | 行动表 |
 | 操作 ID | 动作名称 |
 --------------------------
 | 1 | 创建用户 |
 | 2 | 删除用户 |
 等等。

 | 权限表 |
 | 正确的 ID | 角色 ID | 操作 ID |
 ----------------------------------
 | 1 | 1 | 1 |
 | 2 | 1 | 2 |
 | 3 | 2 | 1 |
 | 4 | 2 | 2 |
 等等。

 | 参数表 |
 | 参数 ID | 正确的 ID | 参数名称 | 参数值 |
 -------------------------------------------------- ---------
 | 1 | 1 | 最大用户访问权限 | 10 |
 | 2 | 2 | 最大用户访问权限 | 10 |
 | 3 | 3 | 最大用户访问权限 | 20 |
 | 4 | 4 | 最大用户访问权限 | 20 |
 等等。

权限表显示 SuperAdmin 和 ClientAdmin 都可以创建和删除用户。参数表将 ClientAdmin 限制为创建最大访问级别为 20(1 为最高)的用户。您可以将此访问级别与角色匹配,以便为 Role.Access_Level >= Max User Access 的新用户提供角色列表。

根据权利,动作可以使用多个参数集,但我想不出除了 Max User Access 之外的任何东西。

于 2012-06-28T16:02:15.827 回答
1

如果您使用权限值类型方案,其中数字代表权限“级别”,并且在某些增量时您获得某些权限怎么办?

例如

超级管理员 10000 客户管理员 1000 技术员 100 工人 10

可以读取 = 10 可以写入设置 = 100 可以创建用户 1000

如果操作的目标用户的权限号高于执行该操作的用户,则拒绝该操作。这是一种相当简单的方法来抽象这些含义,而无需构建物化路径并且必须构建树数据结构。

于 2012-06-28T15:34:00.860 回答