Я использую приведенный ниже код, чтобы переадресовать перенаправленные роли ACL на определенную страницу, проблема в том, что она работает нормально, перенаправляя пользователя на нужную страницу, но не меняя URL-адрес , Поэтому давайте предположим, что пользователь пытается перейти на страницу индекса администратора (localhost/Admin) без входа в систему, подключаемый модуль ACL будет маршрутизировать пользователя на страницу входа в систему, но без изменения URL-адреса (localhost/Admin/Login). Есть идеи, почему это происходит?Zend_controller_request_Asbtract 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, если это делает никакой разницы.
$request->setModuleName('Admin')
->setControllerName('Login')
->setActionName('index');
Безусловно, это удобство для пользователя, чтобы отправить его в его назначенный пункт назначения после входа в систему. Но я бы сохранил это в сеансе; перенаправлять на логин; и, при успешном входе в систему, перенаправьте его в нужное место. Таким образом, отображаемые URL-адреса в его строке местоположения фактически отражают функциональность, которую он выполняет в то время. Re: Бесконечные перекрестные циклы: Конечно, всегда опасность. Но, как правило, один удаляет/исключает ограничения ACL на странице входа. В конце концов, это страница входа в систему. –