ACL建模 - 如何管理访问控制列表的“层次结构”?

时间:2012-06-28 15:03:24

标签: php acl user-permissions database-permissions

我仍然在我的ACL项目中工作,我想了解以下问题的一些想法:

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

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

我想只让SuperAdmin创建一个新用户,但我的一个限制是我必须让CustomerAdmin也创建用户,也是技术人员。

尝试更多教学,SuperAdmin可以成为我。客户管理员是我的客户,他有一个企业。在他的企业中,他可以创建两种类型的用户:技术人员和客户。

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

我不确定我的问题是否客观,但任何能与我讨论此问题的人都会受到欢迎。

2 个答案:

答案 0 :(得分:4)

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

 | Role Table                           | 
 | Role ID | Role Name   | Access Level |
 ----------------------------------------
 |       1 | SuperAdmin  |           10 |
 |       2 | ClientAdmin |           20 |
 |       3 | Technician  |           40 |
 |       4 | Client      |           80 |

 | Action Table            |
 | Action ID | Action Name |
 ---------------------------
 |         1 | Create User |
 |         2 | Delete User |
 Etc.

 | Rights Table                   |
 | Right ID | Role ID | Action ID |
 ----------------------------------
 |        1 |       1 |         1 |
 |        2 |       1 |         2 |
 |        3 |       2 |         1 |
 |        4 |       2 |         2 |
 Etc.

 | Parameter Table                                         |
 | Param ID | Right ID | Parameter Name  | Parameter Value |
 -----------------------------------------------------------
 |        1 |        1 | Max User Access |              10 |
 |        2 |        2 | Max User Access |              10 |
 |        3 |        3 | Max User Access |              20 |
 |        4 |        4 | Max User Access |              20 |
 Etc.

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

操作可以根据权利使用多个参数集,但除了Max User Access之外我无法想到任何其他参数。

答案 1 :(得分:1)

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

E.G。

超级管理员10000 客户管理员1000 技师100 Peon 10

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

如果操作的目标用户具有比执行操作的用户更高的权限编号,则拒绝该操作。这是一种相当简单的方法,可以在不构建物化路径和必须构建树数据结构的情况下抽象那些意味着什么。