我是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'),
),
...
答案 0 :(得分:0)
在getModel()中你正在使用User::model()
,但在authenticate()中你正在调用Users::model()
,可能是你试图调用错误的模型类(它是用户而不是用户)?