题
我最近扩展了 cwebuser 类,现在它具有如此有用的方法:
Yii::app()->user->isAdmin;
Yii::app()->user->isTeacher;
Yii::app()->user->isStudent;
现在有麻烦 访问控制 筛选。
之前,要仅允许管理员访问,我使用了:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('index','update', 'create', 'delete'),
'users'=>array('admin'),
),
array('deny',
'users'=>array('*'),
),
);
}
如何重写访问程序以仅适用于具有yii :: app() - >用户 - > user-> asadmin属性的用户访问权限?
解决方案
您可以在配置中添加选项“表达式”。通常,它会得到一个“ $ user”作为参数。因此,您可以做类似的事情:
array('allow',
'actions'=>array('index','update', 'create', 'delete'),
'expression'=> '$user->isAdmin',
),
请注意,我没有测试过,但我认为它会起作用。
看一看 这里 对于其余的。
其他提示
好吧,它行不通,因为它知道yii :: app() - >用户作为cwebuser实例,并且您开发了用户识别类别,因此它会说“ cwebuser及其行为”没有名为“ isadmin”''的方法或闭合!要使用$ user-> isadmin之类的表达式,您的应该set isadmin属性投掷setState命令,该命令通常会在身份验证方法中保存该命令,以便这样做:
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);
}
}
现在,在访问方法中的用户控制器中,您可以拥有表达式
public function accessRules()
{
return array(
array('allow',
'actions'=>array('action1','action2',...),
'expression'=>'$user->isAdmin',
//or Yii::app()->user->getState('isAdmin'),
),
//...
);
}
不隶属于 StackOverflow