2011-10-28 5 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

最初に、上記のコードが3.1以上であれば、Request :: $ current-> action()でRequest :: instance() - > actionを置き換える必要があることに注意したいと思います。 。

コントローラー内のすべてのアクションに同じ認可要件が必要な場合は、$ assert_authにアクセスする必要があるすべての役割のリストを含む配列を設定します。

同じコントローラ内のアクションに対して異なる許可要件が必要な場合は、$ assert_auth_actionsを多次元配列に設定します。最初の次元はアクションの名前で、アクションにアクセスするためにユーザーが持っていなければならないロールのリストを選択します。

+0

ありがとうございました! 私はもう別の問題があるようです。私は権限のある役割をadminに変更し、それは通常のユーザーをブロックする際に機能しました。 次に、テストのためにroles_usersテーブルのテストユーザーロールを2に変更しました。 このユーザーはまったくログインできません。通常のユーザーとは異なる管理者にログインする方法はありますか? $ user = ORM :: factory( 'user'); $ status = $ user-> login($ _ POST); – user1019144

+0

テストユーザーはログインロールを持っていますか?私が試した最初のものは、単純に1から2に役割を変えた – Darsstar

+0

はいIセットアップ認証デフォルトのスキーマに ユーザーを使用して、テーブル、役割、roles_users /アウト/登録のログインに関連するメソッドのすべてが正常に動作している 私が試したもう1つのことは、ユーザをロール2として管理者に保存するように登録コードを変更することです '$ user-> add( 'roles'、ORM データベースに問題はないようですが、ユーザーは保存されていますが、role_userが保存されましたが、まだこのユーザーではログインできません。 – user1019144