V2.0 - auth角色
获取rbac所有角色列表
PHP Code复制内容到剪贴板
- // 返回所有的角色(rbac中返回,当前台有角色时,不可取)
- $authManager = Yii::$app->authManager;
- $roles = $authManager->getRoles();
- $roleList = ArrayHelper::map($roles, "name", "description");
从数据库中获取所有角色列表,支持传参前后台角色
PHP Code复制内容到剪贴板
- // 默认获取全部角色
- $roleList = User::getRolesDropDownListFormDBFilterProjectIdAndAppId();
- // 仅获取后台角色
- // 第一个参数是项目id, 第二个参数是来源,后台是backend,前台是frontend
- $roleList = User::getRolesDropDownListFormDBFilterProjectIdAndAppId(null,'backend');
清空指定角色的后台角色,再注册指定角色列表
PHP Code复制内容到剪贴板
- $authManager = \Yii::$app->authManager;
- // 清空旧有角色
- $authManager->revokeAll($userModel->id);
- if($this->role){
- // 指定角色
- foreach ($this->role as $name) {
- try {
- $item = $authManager->getRole($name);
- $item = $item ?: $authManager->getPermission($name);
- $authManager->assign($item, $userModel->id);
- } catch (\Exception $exc) {
- throw new \Exception($exc->getMessage());
- }
- }
- }
不走rbac,直接操作数据库:
PHP Code复制内容到剪贴板
- // 清空旧有角色
- \Yii::$app->db->createCommand()->delete(\Yii::$app->db->tablePrefix . "auth_assignment", ["user_id" => $userModel->id])->execute();
- // 指定角色
- $insertData = [];
- $time = time();
- foreach ($this->role as $name) {
- $insertData[] = [
- $userModel->id,
- $name,
- $time
- ];
- }
- \Yii::$app->db->createCommand()->batchInsert(\Yii::$app->db->tablePrefix . "auth_assignment", ['user_id', 'item_name', 'created_at'], $insertData)->execute();
根据用户ID,获取rbac角色
PHP Code复制内容到剪贴板
- $list = User::getRoles($model->user_id);
- if ($list) {
- $html = "";
- foreach ($list as $k => $role) {
- $html .= "<span class='badge badge-primary'>" . $role->description . "</span> ";
- }
- return $html;
- } else {
- return "";
- }
根据用户ID,从数据库中获取用户角色
PHP Code复制内容到剪贴板
- $list = User::getRolesFromDB($model->user_id);
- if ($list) {
- $html = "";
- foreach ($list as $role) {
- $html .= "<span class='badge badge-primary'>" . $role . "</span> ";
- }
- return $html;
- } else {
- return "";
- }
上一篇 select2picker联动
下一篇 V2.0 - 发送邮件