V2.0 - auth角色
yoyocmf 2022-02-27 08:54:06

获取rbac所有角色列表

PHP Code复制内容到剪贴板
  1. // 返回所有的角色(rbac中返回,当前台有角色时,不可取)  
  2.         $authManager = Yii::$app->authManager;  
  3.         $roles = $authManager->getRoles();  
  4.         $roleList = ArrayHelper::map($roles"name""description");  

 

从数据库中获取所有角色列表,支持传参前后台角色

PHP Code复制内容到剪贴板
  1. // 默认获取全部角色  
  2. $roleList = User::getRolesDropDownListFormDBFilterProjectIdAndAppId();  
  3.   
  4. // 仅获取后台角色  
  5. // 第一个参数是项目id, 第二个参数是来源,后台是backend,前台是frontend  
  6. $roleList = User::getRolesDropDownListFormDBFilterProjectIdAndAppId(null,'backend');  

 

 

 

 

清空指定角色的后台角色,再注册指定角色列表

PHP Code复制内容到剪贴板
  1. $authManager = \Yii::$app->authManager;  
  2. // 清空旧有角色  
  3. $authManager->revokeAll($userModel->id);  
  4. if($this->role){  
  5.     // 指定角色  
  6.     foreach ($this->role as $name) {  
  7.         try {  
  8.             $item = $authManager->getRole($name);  
  9.             $item = $item ?: $authManager->getPermission($name);  
  10.             $authManager->assign($item$userModel->id);  
  11.         } catch (\Exception $exc) {  
  12.             throw new \Exception($exc->getMessage());  
  13.         }  
  14.     }  
  15. }  

 

 

不走rbac,直接操作数据库:

PHP Code复制内容到剪贴板
  1. // 清空旧有角色  
  2. \Yii::$app->db->createCommand()->delete(\Yii::$app->db->tablePrefix . "auth_assignment", ["user_id" => $userModel->id])->execute();  
  3. // 指定角色  
  4. $insertData = [];  
  5. $time = time();  
  6. foreach ($this->role as $name) {  
  7.     $insertData[] = [  
  8.         $userModel->id,  
  9.         $name,  
  10.         $time  
  11.     ];  
  12. }  
  13. \Yii::$app->db->createCommand()->batchInsert(\Yii::$app->db->tablePrefix . "auth_assignment", ['user_id''item_name''created_at'], $insertData)->execute();  

 

根据用户ID,获取rbac角色

PHP Code复制内容到剪贴板
  1. $list = User::getRoles($model->user_id);  
  2.                                 if ($list) {  
  3.                                     $html = "";  
  4.                                     foreach ($list as $k => $role) {  
  5.                                         $html .= "<span class='badge badge-primary'>" . $role->description . "</span> ";  
  6.                                     }  
  7.                                     return $html;  
  8.                                 } else {  
  9.                                     return "";  
  10.                                 }  

 

根据用户ID,从数据库中获取用户角色

PHP Code复制内容到剪贴板
  1. $list = User::getRolesFromDB($model->user_id);  
  2.                                     if ($list) {  
  3.                                         $html = "";  
  4.                                         foreach ($list as $role) {  
  5.                                             $html .= "<span class='badge badge-primary'>" . $role . "</span> ";  
  6.                                         }  
  7.                                         return $html;  
  8.                                     } else {  
  9.                                         return "";  
  10.                                     }  

 

 

本文来自于:http://www.yoyo88.cn/note/yoyocmf/613.html

Powered by yoyo苏ICP备15045725号