ACL을 허용하지 않는 역할을 특정 페이지로 리디렉션하도록하려면 아래의 코드를 사용하여 URL을 변경하지 않고 필요한 페이지로 사용자를 라우팅하여 정상적으로 작동하는 것이 문제입니다 . 따라서 사용자가 로그인하지 않고 관리 색인 페이지 (localhost/Admin)로 이동하려고하면 ACL 플러그 인이 사용자를 로그인 페이지로 이동 시키지만 URL은 변경하지 않습니다 (localhost/Admin/Login). 왜 이런 일이 일어나고 있는거야? Zend_controller_request_Abtract URL이 변경되지 않습니다.
class Hyderlib_Controller_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) {
$module = $request->getModuleName();
$recourse = $request->getControllerName();
$action = $request->getActionName();
$identity = $this->auth->getStorage()->read();
if (!isset($identity)) {
$role = 'default';
} else {
$db = Zend_Db_Table::getDefaultAdapter();
$Role = $db->select()->from('User_Account')->where('Email = ?', $identity);
$result = $db->fetchRow($Role);
$role = $result['Role'];
}
if (!$this->_acl->isAllowed($role, $module, $recourse, $action)) {
$request->setModuleName('Admin')
->setControllerName('Login')
->setActionName('index');
}
//$role = $identity->Role;
}
}
나는 전체 코드를 보여주기 위해 제공하는이 모든 차이를 만들 경우 아래하여 preDispatch에 젠드 컨트롤러 플러그인에서 사용되는 코드입니다. 변경할 수있는 브라우저의 주소 표시 줄에 URL을 원하는 경우
$request->setModuleName('Admin')
->setControllerName('Login')
->setActionName('index');
것만으로 가고 싶어하는 URL로 그를 리디렉션 할 수 있습니다 때, 그것은 사용자가 그를 보낼 위해 편리 그의 그가 로그인 한 후에 의도 된 목적지에 도착했다. 그러나 나는 그 것을 세션에서 저장할 것이다. 로그인으로 리디렉션; 로그인에 성공하면 원하는 대상으로 리디렉션합니다. 이렇게하면, 자신의 위치 표시 줄에 표시된 URL은 실제로 그가 수행 한 기능을 반영합니다. 재 : 무한 리디렉션 루프 : 물론, 항상 위험. 하지만 일반적으로 로그인 페이지에서 ACL 제한을 제거/제외합니다. 결국 로그인 페이지가 그 것이다. –