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')
에 노력했다. 괜찮은 해결책에 대한 조언을 고맙게 생각합니다.