2011-01-07 12 views
2

を書き換える私は最近、CWebUserクラスを拡張し、現在はそのような有用なメソッドを持っていますはCWebUserを拡張し、YiiののAccessControl

Yii::app()->user->isAdmin; 
Yii::app()->user->isTeacher; 
Yii::app()->user->isStudent; 

のAccessControlフィルタであっトラブル。

は、唯一の管理者のためのアクセスを許可するために、私が使用:

public function accessRules() 
    { 
     return array(
      array('allow', 
       'actions'=>array('index','update', 'create', 'delete'), 
       'users'=>array('admin'), 
      ), 
      array('deny', 
       'users'=>array('*'), 
      ), 
     ); 
    } 

がどのように唯一のYii ::アプリを持っているユーザーのためのアクセスを委任するaccessRulesを書き換える() - > USER-> isAdmin属性?

答えて

6

オプション '式'を設定に追加できます。通常、引数として "$ user"を取得します。私はこれをテストしていませんが、私はそれが動作すると思います

array('allow', 
    'actions'=>array('index','update', 'create', 'delete'), 
    'expression'=> '$user->isAdmin', 
), 

注:だからあなたのような何かを行うことができます。

残りの部分はhereです。

+2

'式' => Yii :: app() - > user-> isAdmin || Yui :: app() - > user-> isTeacherなども当てはまります。 – ZaQ

+0

式はTRUEまたはFALSEの代入を取得し、evalされると何も残っていません。だからそれはうまくいくはずです:) – Blizz

+0

Blizz、ZaQ、ありがとう! – Kir

1

これは、CWebUserインスタンスとしてYii :: app() - > userを認識し、 'CWebUserとその動作に名前が付けられたメソッドまたはクロージャがないため、UserIdentityクラスを作成したため、 isAdmin "'!する$ user-> isAdminのような表現を使用するように、それはこのようなものになるだろうので、isAdminプロパティは、通常の認証方法でそれを保存するためにセッションを使用するSETSTATEコマンドを投げる設定する必要があります。ユーザーのコントローラになりまし

class UserIdentity extends CUserIdentity 
{ 
    public function authenticate() 
    { 
     //your authentication code 

     //using your functions like $level=$this->isTeacher(); 
     //or $level=$this->isAdmin(); 
     $this->setState('isAdmin',$level); 
    } 
} 

をし、あなたは式を持つことができるaccessRulesメソッドで

public function accessRules() 
{ 
    return array(
     array('allow', 
      'actions'=>array('action1','action2',...), 
      'expression'=>'$user->isAdmin', 
      //or Yii::app()->user->getState('isAdmin'), 
     ), 
     //... 
    ); 
} 
関連する問題