2011-10-28 30 views
0

我使用的代碼直出基於登錄憑據Kohana的3授權碼修改

問題爲確保網站的一個Kohana的指導是代碼似乎如果用戶登錄到只檢查和角色之間沒有區別。

我將如何修改此腳本只允許管理員訪問此動作

在基本控制器我的代碼

public $assert_auth = FALSE; 
public $assert_auth_actions = FALSE; 


public function before() 
{ 
parent::before(); 
$this->_user_auth(); 

} 

protected function _user_auth() 
{ 
$action_name = Request::instance()->action; 
if (($this->assert_auth !== FALSE && Auth::instance()->logged_in($this->assert_auth) === FALSE) 
|| (is_array($this->assert_auth_actions) && array_key_exists($action_name, $this->assert_auth_actions) 
&& Auth::instance()->logged_in($this->assert_auth_actions[$action_name]) === FALSE)) 
{ 
if (Auth::instance()->logged_in()) 
{ 
Request::instance() 
->redirect(''); 
} 
else 
{ 
Request::instance() 
->redirect('admin/login'); 
} 
} 
在控制器的管理頁面

有代碼

public $assert_auth_actions = array(
'index' => array('login') 
); 

回答

0

首先我想說明的是,上面的代碼適用於Kohana 3.0,對於3.1和更高版本,您應該通過Request :: $ current-> action()替換Request :: instance() 。

如果您需要控制器中所有操作的所有相同授權要求,請將$ assert_auth設置爲包含所有角色列表的數組,該列表應具有訪問權限。

如果您希望對同一控制器中的操作有不同的授權要求,請將$ assert_auth_actions設置爲多維數組。第一個維度應該是動作的名稱,選擇用戶訪問該動作所需的角色列表。

+0

謝謝你這有道理! 我似乎不得不另一個問題了。我將授權角色更改爲管理員,並且阻止了普通用戶的工作。 我做的下一件事是將用戶role_users中的測試用戶角色更改爲2以進行測試。 該用戶根本無法登錄。登錄管理員的方法與普通用戶不同嗎? $ user = ORM :: factory('user'); $ status = $ user-> login($ _ POST); – user1019144

+0

測試用戶是否具有登錄角色? – Darsstar

+0

是我設置使用默認模式 用戶,角色,roles_users 所有的輸入/輸出/登記有關測井方法工作正常的權威性表 我試着簡單地改變從1作用,以2的第一件事在這一點上,用戶不能再登錄 我嘗試的第二件事是修改我的註冊碼以將用戶保存爲角色2,即管理員$ user-> add('roles',ORM :: factory('role') - > find(1));' 在數據庫中一切看起來不錯,用戶保存並且role_user已保存,但我仍然無法使用此用戶登錄 – user1019144