zend-framework – Zend_Acl,如何检查具有多个角色的用户以进行资源访问

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了zend-framework – Zend_Acl,如何检查具有多个角色的用户以进行资源访问脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为我的应用程序实现RBAC,一切都是从数据库管理的.

例如,我将所有资/权限存储在名为PErmission的表中,角色表中的所有角色以及另一个名为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,$privilege);
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的zend-framework – Zend_Acl,如何检查具有多个角色的用户以进行资源访问全部内容,希望文章能够帮你解决zend-framework – Zend_Acl,如何检查具有多个角色的用户以进行资源访问所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。