Вы можете сделать это, используя стандартное управление доступом Yii по умолчанию.
Что я обычно делаю, когда не использую RBAC, - это создание поля в базе данных пользователей ACL, которое содержит значения, например.Admin, Super Admin и т. Д., А затем, войдя в систему, я назначаю ее переменной сеанса пользователя Yii :: app () - в файле componentetnst / UserIdentity.php «Notice $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;
}
}
Нет в моих контроллерахУ меня есть что-то вроде
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('*'),
),
);
}
Обратите внимание, что выражение работает как оператор if
Надеюсь, это поможет