2012-10-01 4 views
1

J'ai des contrôleurs avec la prochaine accessRules:Yii :: get actions de contrôleur spécifiées par des actions()

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('*'), 
    ), 
    ); 
    } 

Toutes les actions (dans tous les contrôleurs) spécifiés par actions() Méthode:

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', 
    ); 
    } 

Est Y at-il une chance d'obtenir des contrôleurs/actions liste dépend des autorisations de l'utilisateur actuel? Je veux construire un menu de navigation avec la liste de tous les contrôleurs et leurs actions, quelque chose comme ceci:

  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)

Répondre

0

Pour autant que je sache, il n'y a pas moyen d'obtenir les règles d'accès si elles sont déclarés dans vos contrôleurs.

Vous devrez probablement utiliser le contrôle d'accès basé sur le rôle (RBAC) de Yii et enregistrer vos règles d'accès en externe, probablement dans la base de données. Lisez ici pour plus d'informations: Yii Documentation - role based access control

Il existe également une extension Yii très puissante appelée Rights, qui fournit un backend pour RBAC.

Cela peut sembler exagéré pour le moment, mais le RBAC est inégalé en termes de flexibilité. Vous pouvez créer des rôles utilisateur et affecter des opérations aux rôles de manière très granulaire. Si vous l'utilisez, vous pouvez vérifier l'accès comme Yii::app->user->checkAccess('post.create'), donc exactement ce dont vous avez besoin pour un tel menu. Mais je ne pense pas que vous pouvez obtenir une liste de toutes les actions disponibles hors de la boîte, mais c'est probablement quelque chose que vous pouvez facilement étendre.

Questions connexes