Лучшее место для проверки подлинности пользователя в бэкэнд-модуле, где все страницы доступны только пользователям? - PullRequest
0 голосов
/ 31 марта 2010

У меня есть внутренний модуль, доступ к которому могут получить только авторизованные участники. Поэтому мне нужно проверить подлинность всех действий и всех контроллеров. В настоящее время я делаю это внутри функций preDispatch () внутри классов контроллера. Так что он заботится обо всех действиях внутри этого контроллера. Но все же я должен сделать это для всех контроллеров. Есть ли место, где я мог бы проверить это для всех контроллеров? Так что в основном я хочу проверить подлинность одного места для всего бэкэнд-модуля. Могу ли я сделать это в начальной загрузке?

Ответы [ 2 ]

1 голос
/ 31 марта 2010

Если вы используете загрузочный модуль для каждого модуля, вы, безусловно, можете сделать это там. Тем не менее, я бы рекомендовал держать его на уровне контроллера.

Вы также можете продолжать использовать метод preDispatch(), но вместо этого просто переместите логику в плагин контроллера. Это повлияет на вызов preDispatch() для каждого контроллера.

# in application.ini
resources.frontController.plugins.authenticator = MyApp_Controller_Plugin_Authenticator

# plugin class
class MyApp_Controller_Plugin_Authenticator extends Zend_Controller_Plugin_Abstract {

   public function preDispatch(Zend_Controller_Request_Abstract $request) 
   {
      // check for authenticated user
   }
}

В качестве альтернативы, вы можете просто определить логику в базовом контроллере, от которого наследуются все остальные контроллеры. Вот как я обычно это делаю (потому что я выбираю, когда позвонить _setLoginRequired(), когда мне это нужно).

MyApp_Controller_Base extends Zend_Controller_Action
{
   public function init()
   {
      $this->_setLoginRequired();
   }

   protected function _setLoginRequired();
   {
       // check for authenticated user
   }
}
0 голосов
/ 31 марта 2010

Общее соглашение состоит в том, чтобы создать плагин контроллера для этого, см .: http://framework.zend.com/manual/en/zend.controller.plugins.html. Вы должны зарегистрировать этот плагин на вашем фронт-контроллере в bootstrap (или application.ini). Вы бы переместили свою логику аутентификации из метода preDispatch вашего контроллера в метод preDispatch () вашего плагина. Вам также нужно добавить проверку в начало метода, чтобы увидеть текущий модуль, так как вы хотите, чтобы ваши проверки подлинности выполнялись только на вашем внутреннем модуле.

Альтернативный подход заключается в создании базового класса контроллеров, содержащего проверки подлинности, которые расширяют все контроллеры внутреннего модуля. Лично я бы пошел с плагином, хотя - он предлагает больше гибкости в долгосрочной перспективе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...