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