我有一个如下的 MySQL 数据库表,即资源表:
+----+-----------+------------+
| id | name | type |
+----+-----------+------------+
| 1 | guest | user |
| 2 | member | user |
| 3 | moderator | user |
| 4 | owner | user |
| 5 | admin | user |
| 6 | index | controller |
+----+-----------+------------+
在下一张表上,规则表:
+----+---------+------+-------------+----------------------+
| id | user_id | rule | resource_id | extras |
+----+---------+------+-------------+----------------------+
| 1 | 2 | 3 | 1 | null |
| 2 | 3 | 3 | 2 | null |
| 3 | 4 | 3 | 3 | null |
| 4 | 5 | 3 | 4 | null |
| 5 | 6 | 1 | 1 | index,login,register |
| 6 | 6 | 2 | 2 | login,register |
| 7 | 6 | 1 | 2 | logout |
+----+---------+------+-------------+----------------------+
好的,抱歉篇幅太长,但我试图全面了解我正在尝试做的事情。所以它的工作方式,一个角色(又名用户)可以被授予 (规则:1)访问控制器,一个角色可以继承 (规则:3)从另一个角色或角色访问并被拒绝 (规则:2)访问到控制器。(用户是资源,控制器是资源)
使用 extras 列授予/拒绝访问操作。
这一切都有效,在 zend 中设置 ACL 不是问题。
我现在要做的是展示关系;为此,我需要找到一个角色被授予访问控制器的最低级别,如果它已被明确删除。我计划列出角色。当我单击一个角色时,我希望它显示该角色有权访问的所有控制器。然后单击控制器会显示允许该角色执行的操作。
因此,在上面的示例中,访客可以查看索引控制器的索引操作以及登录操作。成员继承相同的访问权限,但随后被拒绝访问登录操作和注册操作。版主继承成员的规则。
因此,如果我要选择角色版主。我想查看列出的控制器索引。如果我单击控制器,它应该将允许的操作显示为操作:索引。(最初授予客人,但此后没有被拒绝)
有没有这样做的例子。我显然正在使用 Zend MVC (PHP) 和 MySQL。即使只是一个 persudo 代码示例也是一个有用的起点——这是我正在拼凑的拼图的最后一部分。
PS显然我有 ACL 对象 - 是更容易查询它还是通过 PHP/MySQL 自己做更好?
目的是,显示角色可以访问的内容,然后允许我以 GUI 样式添加或编辑角色、控制器和操作(这有点容易) - 目前我正在手动更新数据库建设网站。