Question

J'ai récemment étendu CWebUser classe et maintenant son a de telles méthodes utiles:

Yii::app()->user->isAdmin;
Yii::app()->user->isTeacher;
Yii::app()->user->isStudent;

Maintenant, il y a des problèmes avec AccessControl filtre.

Avant, pour permettre l'accès uniquement admin, je:

public function accessRules()
    {
        return array(
            array('allow',
                'actions'=>array('index','update', 'create', 'delete'),
                'users'=>array('admin'),
            ),
            array('deny',
                'users'=>array('*'),
            ),
        );
    } 

Comment réécrire accessRules à déléguer l'accès uniquement pour les utilisateurs, qui ont une application Yii :: () -> user-> isAdmin attribut

Était-ce utile?

La solution

Vous pouvez ajouter une option 'expression' à la configuration. Normalement, il obtient un « utilisateur $ » comme argument. Ainsi, vous pouvez faire quelque chose comme:

array('allow',
   'actions'=>array('index','update', 'create', 'delete'),
   'expression'=> '$user->isAdmin',
),

Notez que je n'ai pas testé cela, mais je pense que cela va fonctionner.

Jetez un oeil pour le reste.

Autres conseils

Eh bien, il ne fonctionnera pas parce qu'il sait Yii :: app () -> utilisateur comme instance CWebUser et vous développé la classe UserIdentity il dirait « CWebUser et ses comportements n'ont pas une méthode ou la fermeture nommée « isAdmin « '! Pour utiliser des expressions comme $ user-> isAdmin votre devrait définir la propriété de isAdmin lancer la commande setState qui utiliserait session pour sauver qu'habituellement dans la méthode d'authentification de sorte qu'il serait quelque chose comme ceci:

class UserIdentity extends CUserIdentity
{
    public function authenticate() 
    {
        //your authentication code

        //using your functions like $level=$this->isTeacher();
        //or $level=$this->isAdmin();
        $this->setState('isAdmin',$level);
    }
}

et maintenant dans le contrôleur de l'utilisateur dans la méthode accessRules vous pouvez avoir des expressions

public function accessRules()
{
    return array(
        array('allow',
            'actions'=>array('action1','action2',...),
            'expression'=>'$user->isAdmin',
            //or Yii::app()->user->getState('isAdmin'),
        ),
        //...
    );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top