【问题标题】:Getting An Error When Yii Tries To Read The User RoleYii 尝试读取用户角色时出错
【发布时间】:2013-10-26 07:53:13
【问题描述】:

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

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

我按照官方食谱做了所有事情。老实说,我不知道为什么会发生这种情况,所以如果有人可以帮助我解决这个问题,我将不胜感激。

在这里,我编写了编写基于角色的用户控件时所做的步骤。 正如官方 Yii 食谱中提到的,我创建了一个名为 users 的简单数据库表,我在其中定义了角色属性。然后我写了一个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'),
        ),
...

【问题讨论】:

    标签: php web yii role rbac


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复!我在 WebUser::getModel() 方法中犯了一个错误。我应该调用我的模型用户(以复数形式)。
    猜你喜欢
    • 2015-09-22
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2021-08-10
    • 2020-12-30
    • 2017-09-25
    相关资源
    最近更新 更多