【发布时间】:2010-12-22 17:01:46
【问题描述】:
我有一个 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 |
+----+---------+------+-------------+----------------------+
好的,抱歉篇幅太长,但我正在尝试全面介绍我正在尝试做的事情。 所以它的工作方式,一个角色(aka user)可以被授予 (规则:1)访问控制器,一个角色可以继承 (rule: 3) 从另一个角色或角色访问并被拒绝 (rule: 2) 访问控制器。 (用户是一种资源,控制器是一种资源)
使用 extras 列授予/拒绝对操作的访问权限。
这一切都有效,在zend 中设置ACL 不是问题。
我现在要做的是展示关系;为此,我需要找到一个角色被授予访问控制器的最低级别,如果它已被明确删除。我计划列出角色。当我单击一个角色时,我希望它显示该角色有权访问的所有控制器。然后单击控制器会显示允许该角色执行的操作。
因此,在上面的示例中,访客可以查看索引控制器的索引操作以及登录操作。 成员继承相同的访问权限,但随后被拒绝访问登录操作和注册操作。 版主继承成员的规则。
所以如果我要选择角色版主。我想查看列出的控制器索引。如果我单击控制器,它应该将允许的操作显示为操作:索引。 (最初授予客人,但此后一直没有被拒绝)
有没有这样做的例子。我显然正在使用 Zend MVC (PHP) 和 MySQL。 即使只是一个伪代码示例也会是一个有用的起点 - 这是我正在拼凑的拼图的最后一部分。
P.S. 显然我有 ACL 对象 - 查询它会更容易还是通过 PHP/MySQL 自己做会更好?
目的是,显示一个角色可以访问什么,然后我可以添加或编辑一个 GUI 样式的角色、控制器和操作(这有点容易)——目前我正在更新手动数据库,因为我一直在构建网站。
【问题讨论】:
标签: php mysql zend-framework zend-acl