3

現在、私は YII を初めて使用し、認証と承認に取り組んできました。私は認証部分をうまくやり遂げ、今では YII RBAC に従っています。ここで私は少し混乱します。私が使用できるドキュメントに従って

if( Yii::app()->user->checkAccess('createIssue'))

ユーザーがcreateIssueアクションの権限を持っているかどうかを確認します。私の理解では、これを preFilter() に追加して、アクションが実行される前にアクセスをチェックすることができます。

私の質問は、RBAC アプローチを使用している場合、コントローラーの accessRules() 機能で定義されたアクセス ルールを引き続き使用するか、すべてのユーザーを許可し、個々のアクションの preFilter でアクセスを確認する必要があるかどうかです。何が好ましい方法なのか混乱しています。私を案内してください、ありがとう

4

2 に答える 2

7

RBAC は accessRules() の兄であり、Yii 認証メソッドのファミリーです。より堅牢で強力で、通常はより複雑なユースケースで使用されますが、これは要件と傾向によって異なります。

RBAC を使用する場合、定義済みの Yii フィルターを使用する Yii の accessRules() を使用してパーミッションをチェックする必要はありません (チェックしない方がよいでしょう)。メソッド accessRules() の定義を見逃さないようにしてください。Yii にアクション メソッドでフィルタ 'accessControl' を使用するように指示する必要もあります。つまり、両方を使用しないでください。フィルター ディレクティブ (または他のフィルターが定義されていない場合はメソッド全体) と 'accessRules()' メソッドの両方を失います。

デフォルトでは、RBAC は「認証項目」階層と、DB 内のユーザーに割り当てられた認証項目について調べます。DB は自分で管理できますが、RBAC の 3 つのテーブル (のみ) を管理するために、いくつかの既製の拡張機能を使用することを検討することを強くお勧めします。たとえば、RBAMSRBACです。どちらもバグがないわけではありませんが、許可のツリーが些細なものである場合に備えて、多くの作業を削減します。

最後になりましたが、ガイドの関連ページを必ずお読みください。

于 2013-07-16T11:51:44.843 に答える
2

RBAC は CController::accessRules() で動作します

Yii 1.1.11 以降、accessRules() フィルターで RBAC を使用できます。ドキュメントには例が示されていますが、要点は、ルールが次のようになっていることです。

    'roles' =>array('itemName' =>$params),

where$paramsはパラメーターのオプションの配列で、 に渡すものだけですuser->checkAccess($itemName, $params)

于 2013-08-01T21:57:06.947 に答える