【问题标题】:Zend Framework 1 ini config for ACL用于 ACL 的 Zend Framework 1 ini 配置
【发布时间】:2017-06-02 17:52:10
【问题描述】:

所以我设置了 Zend_ACL(基于此:Zend Framework: need typical example of ACL)。

我有一个用于设置权限的配置文件,但我的问题是如何将多个角色的访问权限授予特定的 controller.action

; roles
acl.roles.guest = null
acl.roles.admin = null
acl.roles.company = null
acl.roles.user = null
acl.roles.super_admin = null

; resources
acl.resources.deny.all.all = guest

acl.resources.allow.index.all = guest
acl.resources.allow.index.all = company

所以问题是这个:

acl.resources.allow.index.all = guest
acl.resources.allow.index.all = company

所以我的问题是如何设置它以使多个角色具有访问权限。

【问题讨论】:

    标签: php zend-framework acl


    【解决方案1】:

    我相信您可以调整代码以使其适合您。换个ini就好了

    acl.resources.allow.index.all = guest,company
    

    然后从Zend Framework: need typical example of ACL改代码

    protected function _addResources($resources) {          
    
        foreach ($resources as $permissions => $controllers) {         
    
            foreach ($controllers as $controller => $actions) {
                if ($controller == 'all') {
                    $controller = null;
                } else {
                    if (!$this->has($controller)) {
                        $this->add(new Zend_Acl_Resource($controller));
                    }
                }
    
                foreach ($actions as $action => $role) {
                    if ($action == 'all') {
                        $action = null;
                    }
                    if ($permissions == 'allow') {
                        if(strpos($role, ',') !== false) {
                            $multipleRoles = explode(',',$role);
                            $this->allow($multipleRoles, $controller, $action);
                        } else {
                            $this->allow($role, $controller, $action);
                        }
                    }
                    if ($permissions == 'deny') {
                        if(strpos($role, ',') !== false) {
                            $multipleRoles = explode(',',$role);
                            $this->deny($multipleRoles, $controller, $action);  
                        } else {
                            $this->deny($role, $controller, $action);
                        }
                    }
                }
    
            }
        }
    }
    

    我没有测试过这段代码,但我的理解是它应该可以工作。

    【讨论】:

    • 它有效,你忘记在 $this->deny(multipleRoles, $controller, $action); 中添加 $;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多