我正在尝试在我的Yii网络应用中应用简单的层次结构用户结构(例如:super-admin,admin,user)。我可以使用Yii的默认AccessControl来实现,还是需要在Rbac中实现。
答案 0 :(得分:6)
您可以使用Yii的默认访问控制来执行此操作。
我不使用RBAC时通常会在ACL用户数据库中创建一个包含值的字段。管理员,超级管理员等然后登录后我将它分配给yon :: app() - componetnst / UserIdentity.php中的用户会话变量“注意$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语句
我希望这会有所帮助