我正在为我的应用程序实现 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 个角色的权限。