在Yii中设置用户角色(admin / user)

时间:2014-06-10 10:50:13

标签: php yii

我使用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('*'),
        ),
    );
}

2 个答案:

答案 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";
}

详见: http://www.yiiframework.com/wiki/65