【发布时间】:2013-01-26 19:01:55
【问题描述】:
我正在为我的应用程序实现 RBAC,一切都从数据库进行管理。
例如,我将所有资源/权限存储在一个名为 permission 的表中,所有角色都存储在 role 表中,以及另一个名为 role_permission 的表中,以定义哪个角色可以访问哪些资源/权限。
使用这种方法的目的是因为我希望应用程序的管理员创建role 并自己分配权限给角色。
应用的用户可以拥有多个角色,例如administrator、supervisor、player、referee 等。
我为Zend_Acl 创建了一个模型类来添加角色和资源并为其分配权限。
下面是我所做的。
foreach($this->_roles as $role) {
$this->addRole(new Zend_Acl_Role($role['id']));
}
foreach($this->_permissions as $permmission) {
$this->addResource(new Zend_Acl_Resource($permmission['id']));
}
foreach($this->_rolePermissions as $value) {
$this->allow($value['role_id'], $value['permmission_id']);
}
$this->allow($this->_roleAdmin);
如果我想检查特定角色是否存在权限,例如通过使用此代码,它可以正常工作。
echo $acl->isAllowed($role, $permission) ? 'allowed' : 'denied';
但是我想检查多个角色是否存在具有多个角色的用户的当前权限。
我应该如何检查具有多个角色(例如referee、supervisor)的用户是否有权访问资源create report。使用 isAllowed() 您只能检查 1 个角色的权限。
【问题讨论】:
-
已经有一段时间了,但是 IIRC Zend_ACL 是分层的,所以你会在某个时候扮演角色,它会解决基于树的权限......当然,如果你的角色是不同的树,那么没有帮助...