2013-03-08 40 views
0

我正試圖編寫一些簡單的功能來區分管理員和我正在編寫的CakePHP應用程序中的常規用戶。我已將users表更改爲admin,即01在CakePHP應用程序中授權管理員和常規用戶

AppController.php我有一個$components陣列設置是這樣的:

public $components = array(
    'Session', 
    'Auth' => array(
     'authenticate' => array(
      'Blowfish' => array(
       'fields' => array('username' => 'email') 
      ) 
     ), 
     'loginRedirect' => array('controller' => 'pages', 'action' => 'home'), 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'), 
     'authorize' => array('Controller') 
    ) 
); 

而且這種方法也:

public function isAuthorized($user) { 
    // Check if admin 
    if(isset($this->params['admin']) && $this->Auth->user('admin') == 1) { 
     echo "admin"; 
     return true; 
    } 

    // Default deny 
    return false; 
} 

當我打開網頁我得到這個錯誤:(net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.。由於某些原因,上面的代碼導致無限重定向,我無法解決原因。

此外,我爲admin設置了一個路由前綴,以便管理員可以訪問像/admin/users/edit這樣的URL。當我去那個頁面時,我沒有得到無限的重定向,adminecho'應該是。

我已經在線閱讀了教程並閱讀了Cake文檔,但它們似乎都以無限重定向結束,我如何設置它以便能夠區分管理員和普通用戶,並拒絕/允許訪問每個角色的某些操作?

+0

你在使用$ this-> Auth-> allow();是否正確?要回答這個問題,請提供更多的代碼給你的beforefilters和路由規則 – Sixthpoint 2013-03-09 00:27:03

回答

0

第六點已經指出了這一點。

在沒有auth對象中,驗證組件將重定向到頁面控制器和我認爲你缺少

public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow("*"); // * or array("actions", "that", "are", "allowed") 
} 

所以,這是本質上創建一個無限循環,首先驗證對象丟失,它被定向到PagesController。 Auth組件已配置爲授權所有控制器,包括PagesController。循環再次重定向到PagesController。

您是否試過調查ACL?您可以通過使用與ACL結合的角色來完成相同的任務。

+0

謝謝,我無法弄清楚如何正確使用'allow()',再加上我的'isAuthorized()'方法中的「default deny」麻煩。我已經切換到在我的控制器中使用'beforeFilter()'來允許每個動作單獨進行更細粒度的控制,現在它運行良好。 – 2013-03-09 19:36:41

相關問題