【发布时间】:2012-06-30 03:23:32
【问题描述】:
我仍在处理我的 ACL 项目,我想对以下问题提出一些想法:
我正在使用 MySQL 来存储我的用户、角色和权限。起初,我在我的 TABLE Roles 中创建了一个字段“parent_id”,并试图通过它来管理每个用户的权限。这是一种工作,直到我意识到如果我添加一个新角色,管理层次结构和控制谁可以访问哪个资源真的很复杂。我做了一些搜索,发现使用关系数据库处理层次结构非常复杂,所以我放弃了使用层次结构。
我希望您能帮助我找到管理用户创建的最佳解决方案: 我有 4 个不同的用户:SuperAdmin、CustomerAdmin、技术员、客户。 当我在页面中创建新用户时,我不想让技术人员创建类型为 CustomerAdmin 或 SuperAdmin 的新用户。
我想只让超级管理员创建新用户,但我的一个限制是我必须让客户管理员也创建用户,同时也是技术人员。
为了更具指导性,SuperAdmin 可以是我。客户管理员是我的客户,他有一个企业。在他的企业中,他可以创建两种类型的用户:技术人员和客户。
这只是一个例子,但如果我想创建一种新的角色赋予他新的权限,我必须想办法拒绝他创建一个比他更强大的用户的权限。
我不确定我的问题是否客观,但欢迎任何可以与我讨论这个问题的人。
【问题讨论】:
-
在关系数据库中根据树的性质对树进行建模真的很困难,只是不太适合在单个查询中对数据结构进行建模以进行检索。我之前在 PostgreSQL 中使用所谓的物化路径完成了此操作,但我的实现使用了 MySQL 缺乏的一些功能。我使用了所谓的物化路径,并使用可写视图 + ltree 实现了它。使用 MySQL 做到这一点的最佳方法可能是提取数据并通过遍历数据来构建树,尽管在 PHP 中构建树数据结构有点让我不寒而栗。
-
我明白了你的想法..但我真的必须找到一种最简单的方法来解决这个问题..它不应该是这个怪物
标签: php acl user-permissions database-permissions