我使用Yii::app()->user->login($identity, 0);
登录后,如何设置用户的角色?
我要问的是,此规则如何/用于检查用户是否已登录(@
)并且是管理员(admin
)?
随机控制器中的代码:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('users','user'),
'users'=>array('@'),
),
array('allow',
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny',
'users'=>array('*'),
),
);
}
答案 0 :(得分:2)
好吧,就像Seydamet说的那样,这是Yii用户写的一个非常好的教程。在你的情况下
'users'=>array('admin'),
表示用户的实际用户名为admin。
我相信你正在尝试使用角色。在这种情况下,上面的链接仍然是完美的。
登录后你可以执行此操作http://www.yiiframework.com/wiki/65#hh3,只需指定一个像
这样的角色 if(!$auth->isAssigned('bob',$this->_id))
{
if($auth->assign('bob',$this->_id))
{
Yii::app()->authManager->save();
}
}
然后你可以做一个
public function accessRules()
{
return array(
array('allow', // allow bob role only access to the view file
'actions'=>array('view'),
'roles'=>array('bob')
),
array('deny', // deny everybody else
'users' => array('*')
)
);
}
答案 1 :(得分:1)
我登录他/她之后如何设置用户的角色 Yii :: app() - > user-> login($ identity,0);?
在您的WebUser类中添加方法getRole,如下所示:
class WebUser extends CWebUser {
private $_model = null;
function getRole() {
if($user = $this->getModel()) {
return $user->role;
}
}
private function getModel(){
if (!$this->isGuest && $this->_model === null){
$this->_model = User::model()->findByPk($this->id, array('select' => 'role'));
}
return $this->_model;
}
}
然后在config
中配置您的用户组件'user'=>array(
'class' => 'WebUser',
// …
),
然后添加您的AuthManager类(例如我使用PhpAuthManager。不要忘记在配置文件中配置用户组件)
class PhpAuthManager extends CPhpAuthManager{
public function init(){
// auth.php in config directory consist your roles
if($this->authFile===null){
$this->authFile=Yii::getPathOfAlias('application.config.auth').'.php';
}
parent::init();
if(!Yii::app()->user->isGuest){
$this->assign(Yii::app()->user->role, Yii::app()->user->id);
}
}
}
你的auth.php是这样的:
return array(
'guest' => array(
'type' => CAuthItem::TYPE_ROLE,
'description' => 'Guest',
'bizRule' => null,
'data' => null
),
'admin' => array(
'type' => CAuthItem::TYPE_ROLE,
'description' => 'User',
'children' => array(
'guest', // extend all permission form guest user
),
'bizRule' => null,
'data' => null
),
);
然后在您的控制器过滤器中使用:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('admin', 'onlyAdmin'),
// use roles key not user
'roles'=>array('admin'),
),
);
}
并且在你的行动或事件中:
if(Yii::app()->user->checkAccess('admin')){
echo "hello, I'm administrator";
}