Перенаправление запросов формирует универсальный контроллер в Zend Application без зацикливания навсегда - PullRequest
1 голос
/ 22 декабря 2011

Есть много постов, связанных с тем, что я спрашиваю, но после долгих поисков не смог найти то, что искал, мои извинения, если оно где-то есть.

Моя цель - ВСЕЗапросы к моему Zend App должны проходить через плагин preDispatch, а затем передаваться в пользовательский контроллер Auth, который решит, достаточно ли существующих учетных данных для запрошенной операции.«Достаточность» зависит от логики приложения, поэтому я хочу сделать это на уровне «контроллер + модель».Если их достаточно, они отправляют исходный запрос вместе с указанным действием «контроллер +», если нет, то они по умолчанию используют действие «заблудиться».

В настоящее время я использую пользовательский подключаемый модуль auth, установленный в preDispatch дляпросто проверьте POST'-аутентифицированные учетные данные (если мы входим в систему), тогда во всех случаях плагин сохраняет исходный запрос и перенаправляет всех (авторизованных или нет) на мой контроллер аутентификации, а-ля:

$request->setModuleName('default')
            ->setControllerName('auth')
            ->setActionName('check')
            ->setParam('oreq',$request->getParams());

Моя проблема / вопрос в том, что в рамках моего действия auth-> check, как я должен выполнить перенаправление после принятия решения?Если я использую:

$this->_helper->redirector($or['action'], $oreq['controller']);

, тогда я, очевидно, получаю бесконечный цикл, поскольку эти запросы снова проходят через плагин preDispatch.Конечно, я мог что-то передать с перенаправлением, чтобы плагин Auth игнорировал такие запросы, но это явно дыра в безопасности.Я думал о создании и хранении хеша md5, сохранении его в сеансе и передаче его в качестве escape-параметра, но это кажется немного отрывочным.

Есть какие-нибудь лучшие идеи?Возможно, метод перенаправления, который не проходит стандартную процедуру предварительной отправки в Zend App?Заранее спасибо!

1 Ответ

0 голосов
/ 22 декабря 2011

Обычно это не так в Zend Framework. Не все запросы отправляются в общее место и перенаправляются в исходное запрошенное место аутентификации.

Для контроля доступа используйте Zend_Acl . Благодаря этому вы можете легко определить, есть ли у текущего пользователя необходимая авторизация для доступа к содержимому, иначе перенаправить на действие «потеряться».

Если вы все еще непреклонны в использовании своей техники, используйте метод _forward вместо метода перенаправления.

Поскольку _forward является внутренним перенаправлением, вы можете передать дополнительные аргументы и проверить это в preDispath, чтобы избежать цикла.

$this->_forward($action, $controller, $module, $params)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...