3

私はこのチュートリアルに従ってきましたが、これはすばらしいことですが、1つ質問があります。

http://www.larryullman.com/2010/01/07/custom-authentication-using-the-yii-framework/

アプリケーションコードのどこからでも、次のようにロールプロパティにアクセスできます。

Yii::app()->user->role

しかし、私が本当にやりたいのは、UserControllerでデフォルトのコントローラー認証を使用することです。

/**
  * Specifies the access control rules.
  * This method is used by the 'accessControl' filter.
  * @return array access control rules
  */
public function accessRules()
{  
  return array(
   array('allow',  // allow all users to perform 'index' and 'view' actions
    'actions'=>array('*'),
    'users'=>array('@'),
    // Fails
    'roles'=>array(ModelConstantsRole::ADMIN),
    // Also Fails
    'expression'=>'(isset(Yii::app()->user->role) && (Yii::app()->user->role==ModelConstantsRole::ADMIN))',
   ),
   array('deny',  // deny all users
    'users'=>array('*'),
   ),
  );
}

accessRulesで定義されたルールを実際に検証するクラスは、私が割り当てた役割について実際には何も知らないようです。CAccessControlFilter(40分間XDで検索したくない方のために)。

Larryのアプローチと組み合わせたときにaccessRulesメソッドをどのように利用できるかについてのアイデアはありますか?

ありがとう!

4

2 に答える 2

5

コードから、このルールをすべてのアクションに適用したいようです。そのためには、actions配列を未指定または空の配列のままにする必要があります。

//empty actions
array('allow',  
'actions'=>array(),//array('*'),
...
)

または不特定:

array('allow',  // allow all users to perform 'index' and 'view' actions
//'actions'=>array('*'),
...
)

これはすでにドキュメントに記載されています:

array('allow'、//または'deny'
//オプション、このルールが適用されるアクションIDのリスト(大文字と小文字は区別されません)
//指定されていない場合、ルールはすべてのアクションに適用されます
'actions' => array('edit' 、 '消去')、

ロール配列は、ロール名を持つ配列であることに注意してください。例:

'roles'=>array('role1','role2','role3')

その場合、そこで行っていることはすべてロール配列ですでに行われているため、「式」は必要ありません。

編集:リンクしたチュートリアルを読んだ後、彼はRBACを実装していないようです。この'roles'オプションはrbacを使用するため、rbacがないと機能しません。したがって、'expression'代わりにオプションを使用する必要があり、'expression'オプションは問題なく表示されます。

于 2012-06-10T16:25:27.313 に答える
0

アクションを正しく設定してみてください

array('allow',  // allow all users to perform 'index' and 'view' actions
    'actions'=>array('view', 'delete', 'update'),
于 2012-06-09T12:34:19.630 に答える