2014-09-11 4 views
0

Итак, у меня есть настройка моего сайта следующим образом.Переадресовать неавторизованных пользователей cakePHP на страницу реферера

Индекс перенаправляется на страницу входа, поскольку весь сайт зарегистрирован только для пользователей. Когда пользователь пытается просмотреть страницу, к которой у них нет доступа, они сбрасываются на страницу входа с сообщением «Вы не авторизованы для доступа к этому местоположению».

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

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

class AppController extends Controller { 

    public $theme = 'Default'; 

    public function beforeRender(){ 
     $this->set('referer',$this->referer()); 
     $this->set('userData', $this->Auth->user()); 
    } 

    public $components = array(
     'Session', 
     'Auth' => array(
      'loginRedirect' => array(
       'controller' => 'users', 
       'action' => 'login' 
      ), 
      'logoutRedirect' => array(
       'controller' => 'users', 
       'action' => 'login', 
       'home' 
      ), 
      'authorize' => array('Controller') 
     ) 
    ); 

    public function isAuthorized($user) { 
     // Admin can access every action 
     if (isset($user['role']) && $user['role'] === 'admin') { 
      return true; 
     } 

     // Default deny 
     return false; 
    } 
} 

Просматривая документацию я нашел unauthorizedRedirect и думал, что это может быть в состоянии сделать это, но я еще найти способ его реализации. Я пробовал пару вещей, но пока не могу найти ничего, что работает правильно.

+0

Перенаправление назад к ссылающейся уже по умолчанию, если authenthenticated пользователь пытался получить доступ к страницам, он не имеет разрешения на доступ. Какова ваша версия CakPHP? – ADmad

+0

Ах, да, я на 2.5. так ли мое перенаправление переадресации имени используется для входа в страницу входа, а не обратно к рефереру? –

+0

Он перенаправляет URL-адрес, указанный в 'loginRedirect', только если он не найдет реферера. – ADmad

ответ

-1
public function beforeRender(){ 
      $user = READ USER SESSION 
      if(!$this->isAuthorized($user)){ 
       WRITE REDIRECT CODE HERE 
      } 
      $this->set('referer',$this->referer()); 
      $this->set('userData', $this->Auth->user()); 
     } 
0

Вы можете добавить эту строку в свой компонент auth, чтобы перенаправить неавторизованных пользователей на страницу, из которой они пришли.

'unauthorizedRedirect' => $this->referer() 

Выглядит примерно так:

public $components = array(
    'Session', 
    'Auth' => array(
     'loginRedirect' => array(
      'controller' => 'users', 
      'action' => 'login' 
     ), 
     'logoutRedirect' => array(
      'controller' => 'users', 
      'action' => 'login', 
      'home' 
     ), 
     'authorize' => array('Controller'), 
     'unauthorizedRedirect' => $this->referer() 
    ) 
); 
Смежные вопросы