2013-02-08 4 views
1

Мне интересно, как выполнить управление доступом во всем модуле. Позвольте мне объяснить: если у меня есть модуль (/ authentication /), который разработан только для создания сеанса. И еще один модуль (/ Main /), который содержит основное приложение.Проверка идентификации пользователя перед любым запросом

Что я хочу сделать, это проверить любой запрос на основном модуле, если пользователь правильно создал сеанс.

Во время моих исследований в Интернете я увидел способ сделать это. Я не уверен, поэтому скажите мне, хорошо ли мое решение: я реализую событие в моей начальной загрузке (на module.php), которое проверяет правильность создания сеанса. Если это не так, я перенаправляюсь к аутентификации модуля.

public function onBootstrap($e){ 

    $eventManager = $e->getApplication()->getEventManager(); 

    $auth = new AuthenticationService(); 
    if (!$auth->hasIdentity()) { 
     $response = $e->getResponse(); 
     $response->getHeaders()->addHeaderLine('Location', 'authentification'); 
     $response->setStatusCode(302); 
    } 

    $moduleRouteListener = new ModuleRouteListener(); 
    $moduleRouteListener->attach($eventManager); 
} 

Что вы думаете об этом решении?

К сожалению, это решение не очень хорошо. Я не знаю почему, но кажется, что этот код выполняется даже в аутентификации модуля. Итак, при первом вызове, когда вы пытаетесь войти в URL:/main, вы будете перенаправлены на модуль/аутентификацию, и снова код будет повторно выполнен, и модуль перенаправит вас на/аутентификацию и снова и снова и снова ...

Так что я считаю, что решение состоит в том, чтобы проверить, отличается ли запрашиваемый URL-адрес от этой аутентификации.

Как это сделать?

Надеюсь, мой вопрос ясен и легко понятен.

Спасибо = D

+0

Вы можете хотите проверить существующие модули и как они это делают;) ** ZfcUser ** и ** ** BjyAuthorize будут вашими наивысшими приоритетами в настоящее время. Кроме того, здесь есть несколько тем вокруг этой темы, ищите немного, и вы их найдете. – Sam

ответ

2
public function onBootstrap(MvcEvent $e) { 

     $eventManager = $e->getApplication()->getEventManager(); 

     $eventManager->attach(MvcEvent::EVENT_DISPATCH, function($e) { 

      $controller = $e->getTarget(); 
      $auth = new AuthenticationService(); 
      $is_login = $auth->hasIdentity(); 


         //check if action is login 

      $params = $e->getApplication()->getMvcEvent()->getRouteMatch()->getParams(); 

      if ($params['action'] == 'login') { 


       if ($is_login) { 
        return $controller->redirect()->toRoute('adminindex'); 
       } 

      } else { 


       if (!$is_login) { 
        return $controller->redirect()->toRoute('adminauthlogin'); 
       } 

      } 
}); 

    } 

немного лучше решение;)

+0

или используйте ZfcUser и BjyAuthorize –

+0

Спасибо Сина, это точно, что мне нужно = D –

+0

ваш приветствуем ... любой другой вопрос zz2 plz или упомянуть меня в ваших вопросах ... спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^