2011-09-13 4 views
2

J'essaye d'appliquer une structure utilisateur hiérarchique simple (par ex: super-admin, admin, user) dans mon application web Yii. Puis-je le faire en utilisant AccessControl par défaut de Yii ou est-il nécessaire de l'implémenter dans Rbac.Implémentation RBAC dans le framework Yii

Répondre

6

Vous pouvez le faire en utilisant le contrôle d'accès par défaut de Yii.

Ce que je fais normalement quand je n'utilise pas RBAC est de créer un champ dans la base de données ACL User qui contient des valeurs par exemple. Admin, Super Admin etc et puis une fois connecté, je cède à la Yii :: app() - variable de session utilisateur dans componetnst/UserIdentity.php "Avis $this->setState('accessCode',$user->accessCode);"

class UserIdentity extends CUserIdentity 
{ 
     private $_id; 

    public function authenticate() 
    { 
      $username=strtolower($this->username); 

      $user=Users::model()->find('LOWER(userName)=?',array($username)); 

      if($user===null) 
       $this->errorCode=self::ERROR_USERNAME_INVALID; 
      else if(!$user->validatePassword($this->password)) 
       $this->errorCode=self::ERROR_PASSWORD_INVALID; 
      else 
      { 
       $this->_id=$user->u_id; 
       $this->username=$user->userName; 

       $this->setState('accessCode',$user->accessCode); 
       $this->setState('userName',$this->username); 
     $this->setState('id',$this->_id); 
     $this->setState('accessCode',$user->accessCode); 
       $this->errorCode=self::ERROR_NONE; 
      } 
      return $this->errorCode==self::ERROR_NONE; 

    } 

     public function getId(){ 
      return $this->_id; 
     } 

} 

Pas dans mes contrôleurs d'avoir quelque chose comme

public function accessRules() 
    { 
     return array(
      array('allow', 
       'actions'=>array('admin'), 
       'expression'=>'Yii::app()->user->accessCode & 8', 
      ), 
      array('allow', 
       'actions'=>array('create','update'), 
       'expression'=>'Yii::app()->user->accessCode & 1', 
      ), 
      array('allow', 
       'actions'=>array('view'), 
       'expression'=>'Yii::app()->user->accessCode & 4', 
      ), 
         array('allow', 
       'actions'=>array('delete'), 
       'expression'=>'Yii::app()->user->accessCode & 2', 
      ), 
      array('deny', // deny all users 
       'users'=>array('*'), 
      ), 
     ); 
    } 

Notez l'expression fonctionne comme une instruction if

J'espère que cette aide

+0

Merci un dude beaucoup !!! – Rohit

+0

@Rohit - S'il vous plaît accepter la réponse ;-) – Roland

+3

Juste faire attention à l'approche de le stocker dans la session: Si vous voulez le révoquer pour un utilisateur et il est encore connecté, il aura toujours les autorisations jusqu'à la la session actuelle est détruite. – Blizz

Questions connexes