2013-10-17 82 views
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'), 
     ), 
... 

回答

0

在getModel()你使用User::model(),但在身份驗證()你調用Users::model(),是否可能是你試圖調用錯誤的模型類(它是用戶而不是用戶)?

+0

感謝您的回覆!我在WebUser :: getModel()方法中犯了一個錯誤。我應該打電話給我的模型用戶(複數形式)。 – Tequila

相關問題