2010-02-03 4 views
0

사용자가 게스트이고 /admin/에 액세스하면 /admin/login으로 리디렉션하고 싶습니다. 사용자가 기본 모듈에 있고 액세스 권한이없는 리소스에 액세스하면, /error으로 리디렉션하고 싶습니다.젠드 : 관리자 로그인 전략

/admin을 모듈이라고 가정하면 어떻게해야합니까? 여기에 지금까지이 작업은 다음과 같습니다

<?php 
class KG_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract 
{ 

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

    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 

    $auth = $this->_auth; 

    if($auth->hasIdentity()) { 
     $identity = $auth->getIdentity(); 
     $role = strtolower($identity->role); 
    }else{ 
     $role = 'guest'; 
    } 

    $controller = $request->controller; 
    $action = $request->action; 
    $module = $request->module; 

    if ($module == 'admin') { 

     if (!$this->_acl->isAllowed($role, $controller, $action)) { 
     if ($role == 'guest') { 
      $request->setControllerName('index'); 
      $request->setActionName('index'); 
     } else { 
      $request->setControllerName('login'); 
      $request->setActionName('index'); 
     } 
     }  

    } else { 
     if (!$this->_acl->isAllowed($role, $controller, $action)) { 
     if ($role == 'guest') { 
      $request->setControllerName('user'); 
      $request->setActionName('login'); 
     } else { 
      $request->setControllerName('error'); 
      $request->setActionName('noauth'); 
     } 
     }  
    } 

    }  
} 

그리고 정의 역할에 대한

가 :

<?php 

class Model_Acl extends Zend_Acl { 

    public function __construct() { 

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

    $this->add(new Zend_Acl_Resource('index')); 
    $this->add(new Zend_Acl_Resource('error')); 
    $this->add(new Zend_Acl_Resource('admin')); 
    $this->add(new Zend_Acl_Resource('page')); 
    $this->add(new Zend_Acl_Resource('news')); 
    $this->add(new Zend_Acl_Resource('mvc:user_signin')); 
    $this->add(new Zend_Acl_Resource('mvc:user_signout')); 
    $this->add(new Zend_Acl_Resource('menu')); 
    $this->add(new Zend_Acl_Resource('menuitem')); 
    $this->add(new Zend_Acl_Resource('user')); 
    $this->add(new Zend_Acl_Resource('search')); 
    $this->add(new Zend_Acl_Resource('feed')); 
    $this->add(new Zend_Acl_Resource('bug')); 

    $this->allow(null, array('index', 'error')); 

    $this->allow('guest', 'page', array('index', 'open')); 
    $this->allow('guest', 'menu', array('render')); 
    $this->allow('guest', 'user', array('login')); 
    $this->allow('guest', 'search', array('index', 'search')); 
    $this->allow('guest', 'feed'); 
    $this->allow('guest', 'news'); 

    $this->allow('guest', new Zend_Acl_Resource('mvc:user_signin'), 'navigate'); 
    $this->deny('guest', new Zend_Acl_Resource('mvc:user_signout'), 'navigate'); 
    $this->allow('user', new Zend_Acl_Resource('mvc:user_signout'), 'navigate'); 

    $this->allow('user', 'page', array('list', 'create', 'edit', 'delete')); 

    $this->allow('administrator', null); 

    } 

} 

나는 그것이 관리자 로그인 컨트롤러로 리디렉션 얻을 ->deny('guest', 'admin')에 노력했다. 괜찮은 해결책에 대한 조언을 고맙게 생각합니다.

답변

0

새로운 리소스를 정의하는 코드를 사용자 정의하고 컨트롤러를 사용하지 않고 리소스를 "module.controller"형식으로 만든 다음 그 모듈을 분기별로 확장했습니다.

관련 문제