0

我是 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'),
        ),
...
4

1 回答 1

0

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

于 2013-10-17T18:22:28.063 回答