我最近扩展了 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'),
        ),
        //...
    );
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top