Zend Framework 1 ini config for ACL



所以我有zend_acl设置(基于此:Zend Framework:需要ACL的典型示例(。

我有一个用于设置权限的配置文件,但是我的问题是如何将多个角色访问到特定的控制器

; 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

所以我的问题是如何进行设置以使多个角色可以访问。

我相信您可以调整代码以使其适合您。更改INI

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

然后从Zend框架更改代码:需要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);
                    }
                }
            }
        }
    }
}

我尚未测试此代码,但我的理解是它应该起作用。

最新更新