2015-01-26 1 views
2

내 프로젝트에 대한 ACL이 필요합니다. Alexander Romanenko'video Zend ACL에서 내 요구 사항을 충족시키는 것으로 조사되었습니다. 그것은 너무 놀라운 나는이 구현했습니다 :

모델/LibraryAcl.php :Zend ACL - 공개 권한으로 전환

<?php 
class Model_LibraryAcl extends Zend_Acl 
{ 
    public function __construct() 
    { 

     $this ->add (new Zend_Acl_Resource('index')); 
     $this ->add (new Zend_Acl_Resource('authentication','login')); 
     $this-> add (new Zend_Acl_Resource('list'),'books'); 

     $this->addRole(new Zend_Acl_Role('user')); 
     $this->addRole(new Zend_Acl_Role('admin'),'user'); 

     $this->allow ('user','user'); 
     $this->allow ('user','index'); 
     $this ->allow('admin','books', 'list')); 

    } 
} 


플러그인/AccessCheck.php는 :

<?php 
class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract{ 

    private $_acl = null; 
    private $_auth = null; 

    public function __construct(Zend_Acl $acl , Zend_Auth $auth){ 
     $this->_acl = $acl; 
     $this->_auth = $auth; 
    } 


    public function preDispatch(Zend_Controller_Request_Abstract $request){ 
     $resource = $request->getControllerName(); 
     $action = $request->getActionName(); 
     $identity = $this->_auth->getStorage()->read(); 
     $role = $identity->role; 

     if (!$this->_acl ->isAllowed($role,$resource,$action)){ 
       $request->setControllerName('authentication') 
         ->setActionName('login'); 

     } 
    } 
} 

내가 원하는 건 모두 가능하다 로그인 페이지 (인증/로그인 -> 컨트롤러 이름 : 인증, 작업 이름 : 로그인)에 액세스 할 수있는 사람 (관리자, 사용자 및 아직 로그인하지 않은 사용자)

업데이트 :
나는 역할을 guest로 사용해야하며이 역할에 대한 권한을 설정해야합니다.

답변

1

변화 AccessCheck.php :

<?php 
class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract{ 

    const UNAUTHORIZED_ACCESS = 'UNAUTHORIZED_ACCESS'; 

    public function preDispatch(Zend_Controller_Request_Abstract $request){ 
     $auth = Zend_Auth::getInstance(); 
     if ($auth->hasIdentity()){ 
      $role = $auth->getIdentity(); 
     }else{ 
      $role = 'guest'; 
     } 
     $acl = new Model_LibraryAcl(); 
     $resource = $request->getControllerName(); 
     $action = $request->getActionName(); 


     if ($acl->isAllowed($role,$resource,$action)){ 

       $request->setControllerName('authentication') 
         ->setActionName('login'); 

     } 
    } 
} 

그리고

$this->addRole(new Zend_Acl_Role('guest')); 
$this->addRole(new Zend_Acl_Role('user'), 'guest'); 
$this->addRole(new Zend_Acl_Role('admin'), 'user'); 

$this->allow('guest', 'authentication', 'login'); 
LibraryAcl.php를 추가
1
$this->addRole(new Zend_Acl_Role('guest')); 
$this->addRole(new Zend_Acl_Role('user'), 'guest'); 
$this->addRole(new Zend_Acl_Role('admin'), 'user'); 

$this->allow('guest', 'authentication', 'login'); 
관련 문제