役割、タスク、および操作の階層を設定し、ユーザーに割り当てて、操作をミラーリングする controller:action を使用します。
docsから、ユーザーが操作にアクセスできることを確認したい場合は、次のように確認します。
if(Yii::app()->user->checkAccess('createPost'))
これは、ユーザーが対応するロールに対して承認されているかどうかを確認するために、すべてのアクションにコードを手動で追加する必要があるという印象を与えます。私は何かが欠けていますか - 確かに、アクションごとにこれを自動的に行う方法があります。
基本の Controller クラスを拡張し、Yii::app()->controller と Yii::app()->controller->action を使用してロールを生成し、ユーザーをチェックする何かを (preFilter に?) 追加することができます。その役割を許可されています。
しかし、これを行う方法がすでにあるに違いないと確信していますか?
accessRules フィルターでロールを渡すことができることは知っていますが、それはロール>タスク>操作階層を持つ目的を無効にしているようで、各アクションにそのようなルールを割り当てる必要があるのは、各関数でチェックを行うのと同じくらい悪いです最初の場所。
/item/delete などを実行しているユーザーが操作 'item:delete' (または DB AuthItem テーブルで期待される形式) に対して承認されていることを自動的にチェックする、他に欠けているオプションはありますか?
編集
データベースRBACと一緒にaccessRulesに関する問題を明確にします:
データベースに役割構造を定義します。それぞれが複数のタスクに対して承認された多数の役割であり、それらの役割は詳細な操作で構成されます (たとえば、役割「読者」はタスク「投稿の閲覧」に対して承認される場合があります。 'post/index' と 'post/view' のアップ)。次に、ユーザーを役割に割り当てます。これにより、その役割のタスクと、それらのタスク内の操作に対する権限がユーザーに付与されます。次に、コントローラー アクション (つまり操作) に対してuser->checkAccessを呼び出すと 、その操作を含むタスクを含むロールに対してユーザーが承認されていることを DB でチェックします。
しかし、各コントローラーを調べて、各アクションに対してどのロールが承認されるかを定義すると、データベースで既に行った作業が重複し、ルールが競合する可能性があります。