gpt4 book ai didi

zend-framework - Zend_Acl,如何检查具有多个角色的用户的资源访问权限

转载 作者:行者123 更新时间:2023-12-02 18:34:53 25 4
gpt4 key购买 nike


我正在为我的应用程序实现 RBAC,一切都通过数据库进行管理。

例如,我将所有资源/权限存储在名为 permission 的表中,将所有角色存储在 role 表中,以及另一个名为 role_permission 的表定义哪个角色可以访问哪些资源/权限。

采用这种方法的目的是因为我希望应用程序的管理员自己创建角色并为角色分配权限。

应用程序的用户可以拥有多个角色,例如管理员主管玩家裁判等。

我为 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';

但是我想检查多个角色是否存在具有多个角色的用户的当前权限。

我应该如何检查具有多个角色(例如裁判主管)的用户是否有权访问资源创建报告。使用 isAllowed() 您只能检查 1 个角色的权限。

最佳答案

我通常采用的方法是创建一个扩展 Zend_Acl 的类,并扩展 isAllowed() 函数,以便它可以将我的用户对象作为参数。然后,它循环遍历该用户的角色,对每个角色执行检查。例如:

public function isAllowed($roleOrUser = null, $resource = null, $privilege = null)
{
if ($roleOrUser instanceof Users_Model_User) {
// check each of that user's roles
foreach ($roleOrUser->roles as $role) {
if (parent::isAllowed($role, $resource, $privilege)) {
return true;
}
}

return false;
} else {
return parent::isAllowed($roleOrUser, $resource, $privilege);
}
}

关于zend-framework - Zend_Acl,如何检查具有多个角色的用户的资源访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com