2015-04-01 79 views
0

我在警予是新的角色管理,
我有2個角色就像管理1,Admin2的
我有2個控制器,它就像動作

(1)UserController中 - 創建,更新,刪除
(2)CategoryController - 查看,創建,更新
如何在yii中分配角色和checkaccess方法?

我想給用於管理1 checkAccess方法等
(1)UserController中 - 更新,刪除
(2)CategoryController - 更新

我想給爲Admin2的checkAccess方法類似
(1)UserController中 - 創建,更新,刪除
(2)CategoryController - 創建,查看

我怎麼可以給的checkPermission這2控制器特別管理員? 任何幫助將非常感激。

這裏是我的checkAccess方法,但它給了我錯誤

class UserIdentity extends CUserIdentity 
{ 
    private $_id; 
     public $role; 
     public $roleName; 

    /** 
    * Authenticates a user. 
    * @return boolean whether authentication succeeds. 
    */ 
    public function authenticate() 
    { 
     $username = $this->username; 
     $password = md5($this->password); 
     $user=Login_User::model()->findByAttributes(array('Email'=>$username,'Password'=>$password,'Status'=>'1')); 
     if(empty($user)) 
     { 
      $this->errorCode=self::ERROR_USERNAME_INVALID; 
     } 
     elseif($password != $user->Password) 
     { 
      $this->errorCode=self::ERROR_PASSWORD_INVALID; 
     } 
     else 
     { 
      $this->_id=$user->UserID; 
      $this->username=$user->Email; 
         $this->role=$user->RoleID; 

         $roleQuery = "SELECT * FROM role WHERE RoleID = ".$user->RoleID." "; 
         $roleData = Yii::app()->db->createCommand($roleQuery)->queryAll(); 

         if(isset($roleData[0]['Title']) && $roleData[0]['Title'] != '') { 
          $this->roleName = $roleData[0]['Title']; 
         } 

         if($user->RoleID != '') { 
          $query = "SELECT * FROM rolepermission WHERE RoleID = ".$user->RoleID." AND Status = 1 "; 
          $permissionData = Yii::app()->db->createCommand($query)->queryAll(); 
         } 

         $auth=Yii::app()->authManager; 
         $rolePemirssion=$auth->createRole($this->roleName); 
         foreach($permissionData as $key => $value) { 
          $rolePemirssion->addChild($value['Controller'].$value['Action']); 
         } 
      $this->errorCode=self::ERROR_NONE; 
     } 
     return $this->errorCode==self::ERROR_NONE; 
    } 

} 

回答

1

您應該使用yii access control filters

class UserController extends CController 
{ 
    … 
    public function accessRules() 
    { 
     return array(
      ... 
      array('allow', 
       'actions'=>array('update', 'delete'), 
       'roles'=>array('admin1'), 
      ), 
      array('allow', 
       'actions'=>array('update'), 
       'roles'=>array('admin2'), 
      ), 
      ... 
     ); 
    } 
} 
class CategoryController extends CController 
{ 
    … 
    public function accessRules() 
    { 
     return array(
      ... 
      array('allow', 
       'actions'=>array('create', 'update', 'delete'), 
       'roles'=>array('admin1'), 
      ), 
      array('allow', 
       'actions'=>array('create', 'view'), 
       'roles'=>array('admin2'), 
      ), 
      ... 
     ); 
    } 
} 
+0

謝謝,這個工作對我來說,現在我想建立checkAccess方法,我將自己的checkAccess有問題的代碼,但它給了我錯誤,如「Either」{parent}「或」DashboardIndex「不存在。」什麼是問題?你能檢查我的代碼嗎? – Nikul 2015-04-01 10:10:32