1

次のaccessRulesを持つコントローラーがあります:

  public function accessRules()
  {
    return array(
      array('allow',
        'actions'=>array('login','logout'),
        'users'=>array('*'),
      ),
      array('allow',
        'actions'=>array('index'),
        'users'=>array('@'),
      ),
      array('allow',
        'actions'=>array('users'),
        'expression'=>'$user->getState(\'role\')==0',
      ),
      array('deny',
        'users'=>array('*'),
      ),
    );
  }

アクション()メソッドで指定された(すべてのコントローラーの)すべてのアクション:

  public function actions()
  {
    return array(
      'index'=>$this->module->getName().'.controllers.main.IndexAction',
      'login'=>$this->module->getName().'.controllers.main.LoginAction',
      'logout'=>$this->module->getName().'.controllers.main.LogoutAction',
    );
  }

現在のユーザー権限に応じてコントローラー/アクションリストを取得する機会はありますか?すべてのコントローラーとそのアクションのリストを含むナビゲーションメニューを作成したいのですが、次のようになります。

  1. Controler1 (show only if current user have permissions to access it)
    • Controler1 / action1 (show only if current user have permissions to access it)
    • Controler1 / action2 (show only if current user have permissions to access it)
  2. Controller2 (show only if current user have permissions to access it)
    • Controler2 / action1 (show only if current user have permissions to access it)
    • Controler2 / action2 (show only if current user have permissions to access it)
4

1 に答える 1

0

私の知る限り、コントローラーで宣言されている場合、アクセスルールを取得する方法はありません。

おそらく、Yiiの役割ベースのアクセス制御(RBAC)を使用して、アクセスルールを外部(おそらくデータベース)に保存する必要があります。詳細については、こちらをお読みください:Yiiドキュメント-役割ベースのアクセス制御

Rightsと呼ばれる非常に有能なYii拡張機能もあり、RBACのバックエンドを提供します。

これは今のところやり過ぎのように思えるかもしれませんが、RBACは柔軟性において比類のないものです。ユーザーロールを作成し、ロールに操作を非常にきめ細かく割り当てることができます。

使用すれば、のようにアクセスを確認できるYii::app->user->checkAccess('post.create')ので、まさにそのようなメニューに必要なものです。しかし、利用可能なすべてのアクションのリストをすぐに入手できるとは思いませんが、これはおそらく比較的簡単に拡張できるものです。

于 2012-10-01T12:15:15.240 に答える