0
我是Yii中的一名新成員,我試圖在我的Web應用程序中執行RBAC控制。我寫一個授權和註冊頁面,一切工作都很完美。但是,當我試圖使用Yii ::應用讀取當前用戶的角色() - >用戶>角色我收到包含以下內容的錯誤:Yii嘗試讀取用戶角色時出現錯誤
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;
}
。 .. 最後,我宣佈在主網絡配置文件中的所有組件這樣:
...
'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'),
),
...
感謝您的回覆!我在WebUser :: getModel()方法中犯了一個錯誤。我應該打電話給我的模型用戶(複數形式)。 – Tequila