2017-06-02 70 views
0

所以我有Zend_ACL设置(基于此:Zend Framework: need typical example of ACL)。Zend Framework 1 ACL的ini配置

而且我有权限设置一个配置文件,但我的问题是我怎么给一个特定的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 

所以我的问题是我如何设置这个以便多个角色有权访问。

回答

0

我相信你可以调整代码,使它为你工作。更改像

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

的INI然后将代码从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); 
        } 
       } 
      } 

     } 
    } 
} 

改变我还没有测试此代码,但我的理解是,它应该工作。

+0

它的工作原理,你忘了添加$到$ this-> deny(multipleRoles,$ controller,$ action); – Uffo

+0

我修复了它,并对其进行了测试,它很有用,谢谢! – Uffo

+0

好的。很高兴知道它为你工作! – ksoni