1

RBAC をカスタマイズしようとしているので、ユーザー用にいくつかのロールを作成しました。

今、どのロールがどのアクションにアクセスする必要があるかをコントローラーに伝える方法を理解しようとしています。

コントローラーのコードでは、これが表示されます

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete'),
            'users'=>array('admin'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),

ここで、「ユーザー」は RBAC のユーザー ロールを意味するものだと思っていましたが、完全に間違っていると思います。したがって、一方ではこの accessRules があり、他方では RBAC のいくつかの役割があります。コントローラーに自分のロールを使用するように指示するにはどうすればよいですか?

ジョニーのアップデート

面白そうですね....私はテストアクションを作りました

public function actionNew()
    {
        echo 'TEST'; die;

次に、テストのためだけに、ルールをすべてのユーザーがアクセスできるようにしました

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete'),
            'users'=>array('admin'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),


        array('allow',
            'actions'=>array('new'),
            'users'=>array('*'),
        ),
    );
}

しかし、それは機能していません:(理由はありますか?

私は得ています

Error 403
You are not authorized to perform this action.

更新 2

OK テスト アクションは * ユーザーで動作します。

今、私はそれを自分の役割と結び付けようとしていますが、そこで立ち往生しています:(

array('allow',
        'actions'=>array('new'),
        'roles'=>array('role1'),
    ),

動かない :(

このアクションを呼び出すボタンのあるページに、ロールチェックコードがあります

if(Yii::app()->user->checkAccess('role1')){
    echo "hello, I'm role1";
}

ジョニーの最終更新 助けてくれてありがとう、やっとやりました。理由はわかりませんが、問題は、これらすべての新しいアクションを拒否配列の前に置かなければならないことでした。

このような

public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view'),
                'users'=>array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin','delete'),
                'users'=>array('admin'),
            ),
            array('allow',
                'actions'=>array('new'),
                'roles'=>array('role1'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),



        );
    }

そして、この場合、それは機能します。以前、私の新しいアクションは 'deny' エラーの後のコードにありました。上位の更新でコード フラグメントを確認できます。私には奇妙ですが、今では正常に動作します:)

4

1 に答える 1

2

1 つの方法は、コントローラーで次のようなものを呼び出すことです。

if(Yii::app()->user->checkAccess('my_user_role')){ // Do something }

?匿名ユーザー

@ログインユーザー

*任意のユーザーがログインしているかどうか

adminこの場合、ユーザーのタイプではなく、ユーザー名でもあります

あなたの場合、これを行うことができます:

array('allow',
'actions'=>array('create','update'),
'users'=>array('@'),
'roles'=>array('myRole')
),

users上記のリストからユーザーのタイプを指定します。rolesキーを使用すると、特定のロールをそのユーザー グループに割り当てることができます。

于 2014-03-19T17:15:34.510 に答える