2014-09-11 48 views
0

好的,所以我按照以下方式設置了我的網站。將未經授權的cakePHP用戶重定向到引用頁面

索引重定向到登錄頁面,因爲整個站點僅用於登錄用戶。當用戶嘗試查看他們無權訪問的頁面時,他們被轉儲到登錄頁面,並顯示「您無權訪問該位置」消息。

我想改變這個,所以如果登錄用戶試圖訪問一個未經身份驗證的頁面,他們會被重定向回引用頁面。

在我個人的控制器中,我有一個isAuthorised方法,用於檢查用戶角色並允許或禁止訪問。

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 2014-09-11 15:11:01

+0

啊,是的,我在2.5。所以我的登錄重定向強制使用登錄頁面,而不是回到引用者? – 2014-09-11 16:50:33

+0

只有當它找不到引用者時,它纔會重定向到「loginRedirect」中設置的URL。 – ADmad 2014-09-11 19:26:38

回答

-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() 
    ) 
); 
相關問題