Yii尝试读取用户角色时出错

时间:2013-10-17 17:20:55

标签: php web yii role rbac

我是Yii的新手,我正在尝试在我的Web应用程序中执行RBAC控制。我写了授权和注册页面,一切都很完美。但是当我尝试使用Yii :: app() - > user->角色读取当前用户的角色时,我收到的错误包含以下内容:

PHP warning
include(User.php): failed to open stream: No such file or directory

我在官方食谱中做过一切。老实说,我不知道为什么会发生这种情况,如果有人能帮助我解决这个问题,我将非常感激。

在这里,我编写了在编写基于角色的用户控件时所执行的步骤。 正如Yii官方食谱中所提到的,我创建了一个名为users的简单数据库表,我在其中定义了role属性。然后我写了一个WebUser类:

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;
    }
}

下一步我更改了UserIdentity :: authentificate()方法的默认实现,我尝试将角色分配给当前用户:

public function authenticate()
    {
        $users = Users::model()->find('LOWER(name)=?', array(strtolower($this->name)));
        if($users === null)
            $this->errorCode = self::ERROR_USERNAME_INVALID;
        else if ($users->validatePassword(md5($this->password))) 
            $this->errorCode = self::ERROR_PASSWORD_INVALID;

        else
        {
            $this->_id = $users->id;
            $this->username = $users->name;

            $auth=Yii::app()->authManager;

            echo "user role = ".$users->role.", user id = ".$this->_id;
            if(!$auth->isAssigned($users->role,$this->_id))
            {
                if($auth->assign($users->role,$this->_id))
                {
                    Yii::app()->authManager->save();
                }
            }

            $this->errorCode=self::ERROR_NONE;
        }
        return $this->errorCode == self::ERROR_NONE;
    }

... 最后,我在主Web配置文件中声明了所有这些组件:

...
'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
...

'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            'class'=>'WebUser',
            'allowAutoLogin'=>true,
        ),

        'authManager' => array(
            'class' => 'PhpAuthManager',
            'defaultRoles' => array('guest'),
        ),
...

1 个答案:

答案 0 :(得分:0)

在getModel()中你正在使用User::model(),但在authenticate()中你正在调用Users::model(),可能是你试图调用错误的模型类(它是用户而不是用户)?