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