ACL 配置中的 Zend Framework 1

Zend Framework 1 ini config for ACL

所以我有 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

所以我的问题是如何设置它以便多个角色都可以访问。

我相信您可以调整代码使其适合您。更改 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);
                    }
                }
            }

        }
    }
}

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