Commit 7f171d14a4075963f28c9acaf3fdbfd8326057c1
1 parent
8921556d
完成用户的角色分配,妥妥的。睡觉~
Showing
14 changed files
with
256 additions
and
67 deletions
ruoyi-ui/src/api/system/permission.js
| @@ -17,6 +17,23 @@ export function assignRoleMenu(data) { | @@ -17,6 +17,23 @@ export function assignRoleMenu(data) { | ||
| 17 | }) | 17 | }) |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | +// 查询用户拥有的角色数组 | ||
| 21 | +export function listUserRoles(userId) { | ||
| 22 | + return request({ | ||
| 23 | + url: '/system/permission/list-user-roles?userId=' + userId, | ||
| 24 | + method: 'get' | ||
| 25 | + }) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// 赋予用户角色 | ||
| 29 | +export function assignUserRole(data) { | ||
| 30 | + return request({ | ||
| 31 | + url: '/system/permission/assign-user-role', | ||
| 32 | + method: 'post', | ||
| 33 | + data: data | ||
| 34 | + }) | ||
| 35 | +} | ||
| 36 | + | ||
| 20 | // 赋予角色数据权限 | 37 | // 赋予角色数据权限 |
| 21 | export function assignRoleDataScope(data) { | 38 | export function assignRoleDataScope(data) { |
| 22 | return request({ | 39 | return request({ |
ruoyi-ui/src/api/system/role.js
| @@ -9,6 +9,14 @@ export function listRole(query) { | @@ -9,6 +9,14 @@ export function listRole(query) { | ||
| 9 | }) | 9 | }) |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | +// 查询角色(精简)列表 | ||
| 13 | +export function listSimpleRoles() { | ||
| 14 | + return request({ | ||
| 15 | + url: '/system/role/list-all-simple', | ||
| 16 | + method: 'get' | ||
| 17 | + }) | ||
| 18 | +} | ||
| 19 | + | ||
| 12 | // 查询角色详细 | 20 | // 查询角色详细 |
| 13 | export function getRole(roleId) { | 21 | export function getRole(roleId) { |
| 14 | return request({ | 22 | return request({ |
ruoyi-ui/src/views/system/user/index.vue
| @@ -163,6 +163,13 @@ | @@ -163,6 +163,13 @@ | ||
| 163 | @click="handleResetPwd(scope.row)" | 163 | @click="handleResetPwd(scope.row)" |
| 164 | v-hasPermi="['system:user:resetPwd']" | 164 | v-hasPermi="['system:user:resetPwd']" |
| 165 | >重置</el-button> | 165 | >重置</el-button> |
| 166 | + <el-button | ||
| 167 | + size="mini" | ||
| 168 | + type="text" | ||
| 169 | + icon="el-icon-circle-check" | ||
| 170 | + @click="handleRole(scope.row)" | ||
| 171 | + v-hasPermi="['system:permission:assign-user-role']" | ||
| 172 | + >分配角色</el-button> | ||
| 166 | </template> | 173 | </template> |
| 167 | </el-table-column> | 174 | </el-table-column> |
| 168 | </el-table> | 175 | </el-table> |
| @@ -290,31 +297,30 @@ | @@ -290,31 +297,30 @@ | ||
| 290 | </el-dialog> | 297 | </el-dialog> |
| 291 | 298 | ||
| 292 | <!-- 分配角色 --> | 299 | <!-- 分配角色 --> |
| 293 | -<!-- <el-dialog title="分配角色" :visible.sync="openMenu" width="500px" append-to-body>--> | ||
| 294 | -<!-- <el-form :model="form" label-width="80px">--> | ||
| 295 | -<!-- <el-form-item label="用户名称">--> | ||
| 296 | -<!-- <el-input v-model="form.username" :disabled="true" />--> | ||
| 297 | -<!-- </el-form-item>--> | ||
| 298 | -<!-- <el-form-item label="用户昵称">--> | ||
| 299 | -<!-- <el-input v-model="form.nickname" :disabled="true" />--> | ||
| 300 | -<!-- </el-form-item>--> | ||
| 301 | -<!-- <el-form-item label="角色">--> | ||
| 302 | -<!-- <el-select v-model="form.roleIds" multiple placeholder="请选择">--> | ||
| 303 | -<!-- <el-option--> | ||
| 304 | -<!-- v-for="item in roleOptions"--> | ||
| 305 | -<!-- :key="item.roleId"--> | ||
| 306 | -<!-- :label="item.roleName"--> | ||
| 307 | -<!-- :value="item.roleId"--> | ||
| 308 | -<!-- :disabled="item.status == 1"--> | ||
| 309 | -<!-- ></el-option>--> | ||
| 310 | -<!-- </el-select>--> | ||
| 311 | -<!-- </el-form-item>--> | ||
| 312 | -<!-- </el-form>--> | ||
| 313 | -<!-- <div slot="footer" class="dialog-footer">--> | ||
| 314 | -<!-- <el-button type="primary" @click="submitMenu">确 定</el-button>--> | ||
| 315 | -<!-- <el-button @click="cancelMenu">取 消</el-button>--> | ||
| 316 | -<!-- </div>--> | ||
| 317 | -<!-- </el-dialog>--> | 300 | + <el-dialog title="分配角色" :visible.sync="openRole" width="500px" append-to-body> |
| 301 | + <el-form :model="form" label-width="80px"> | ||
| 302 | + <el-form-item label="用户名称"> | ||
| 303 | + <el-input v-model="form.username" :disabled="true" /> | ||
| 304 | + </el-form-item> | ||
| 305 | + <el-form-item label="用户昵称"> | ||
| 306 | + <el-input v-model="form.nickname" :disabled="true" /> | ||
| 307 | + </el-form-item> | ||
| 308 | + <el-form-item label="角色"> | ||
| 309 | + <el-select v-model="form.roleIds" multiple placeholder="请选择"> | ||
| 310 | + <el-option | ||
| 311 | + v-for="item in roleOptions" | ||
| 312 | + :key="parseInt(item.id)" | ||
| 313 | + :label="item.name" | ||
| 314 | + :value="parseInt(item.id)" | ||
| 315 | + ></el-option> | ||
| 316 | + </el-select> | ||
| 317 | + </el-form-item> | ||
| 318 | + </el-form> | ||
| 319 | + <div slot="footer" class="dialog-footer"> | ||
| 320 | + <el-button type="primary" @click="submitRole">确 定</el-button> | ||
| 321 | + <el-button @click="cancelRole">取 消</el-button> | ||
| 322 | + </div> | ||
| 323 | + </el-dialog> | ||
| 318 | 324 | ||
| 319 | </div> | 325 | </div> |
| 320 | </template> | 326 | </template> |
| @@ -330,6 +336,8 @@ import {listSimplePosts} from "@/api/system/post"; | @@ -330,6 +336,8 @@ import {listSimplePosts} from "@/api/system/post"; | ||
| 330 | 336 | ||
| 331 | import {SysCommonStatusEnum} from "@/utils/constants"; | 337 | import {SysCommonStatusEnum} from "@/utils/constants"; |
| 332 | import {DICT_TYPE, getDictDatas} from "@/utils/dict"; | 338 | import {DICT_TYPE, getDictDatas} from "@/utils/dict"; |
| 339 | +import {assignUserRole, listUserRoles} from "@/api/system/permission"; | ||
| 340 | +import {listSimpleRoles} from "@/api/system/role"; | ||
| 333 | 341 | ||
| 334 | export default { | 342 | export default { |
| 335 | name: "User", | 343 | name: "User", |
| @@ -420,6 +428,8 @@ export default { | @@ -420,6 +428,8 @@ export default { | ||
| 420 | } | 428 | } |
| 421 | ] | 429 | ] |
| 422 | }, | 430 | }, |
| 431 | + // 是否显示弹出层(角色权限) | ||
| 432 | + openRole: false, | ||
| 423 | 433 | ||
| 424 | // 枚举 | 434 | // 枚举 |
| 425 | SysCommonStatusEnum: SysCommonStatusEnum, | 435 | SysCommonStatusEnum: SysCommonStatusEnum, |
| @@ -499,6 +509,11 @@ export default { | @@ -499,6 +509,11 @@ export default { | ||
| 499 | this.open = false; | 509 | this.open = false; |
| 500 | this.reset(); | 510 | this.reset(); |
| 501 | }, | 511 | }, |
| 512 | + // 取消按钮(角色权限) | ||
| 513 | + cancelMenu() { | ||
| 514 | + this.openRole = false; | ||
| 515 | + this.reset(); | ||
| 516 | + }, | ||
| 502 | // 表单重置 | 517 | // 表单重置 |
| 503 | reset() { | 518 | reset() { |
| 504 | this.form = { | 519 | this.form = { |
| @@ -561,6 +576,28 @@ export default { | @@ -561,6 +576,28 @@ export default { | ||
| 561 | }); | 576 | }); |
| 562 | }).catch(() => {}); | 577 | }).catch(() => {}); |
| 563 | }, | 578 | }, |
| 579 | + /** 分配用户角色操作 */ | ||
| 580 | + handleRole(row) { | ||
| 581 | + this.reset(); | ||
| 582 | + const id = row.id | ||
| 583 | + // 处理了 form 的用户 username 和 nickname 的展示 | ||
| 584 | + this.form.id = id; | ||
| 585 | + this.form.username = row.username; | ||
| 586 | + this.form.nickname = row.nickname; | ||
| 587 | + // 打开弹窗 | ||
| 588 | + this.openRole = true; | ||
| 589 | + // 获得角色列表 | ||
| 590 | + listSimpleRoles().then(response => { | ||
| 591 | + // 处理 roleOptions 参数 | ||
| 592 | + this.roleOptions = []; | ||
| 593 | + this.roleOptions.push(...response.data); | ||
| 594 | + }); | ||
| 595 | + // 获得角色拥有的菜单集合 | ||
| 596 | + listUserRoles(id).then(response => { | ||
| 597 | + // 设置选中 | ||
| 598 | + this.form.roleIds = response.data; | ||
| 599 | + }) | ||
| 600 | + }, | ||
| 564 | /** 提交按钮 */ | 601 | /** 提交按钮 */ |
| 565 | submitForm: function() { | 602 | submitForm: function() { |
| 566 | this.$refs["form"].validate(valid => { | 603 | this.$refs["form"].validate(valid => { |
| @@ -581,6 +618,19 @@ export default { | @@ -581,6 +618,19 @@ export default { | ||
| 581 | } | 618 | } |
| 582 | }); | 619 | }); |
| 583 | }, | 620 | }, |
| 621 | + /** 提交按钮(角色权限) */ | ||
| 622 | + submitRole: function() { | ||
| 623 | + if (this.form.id !== undefined) { | ||
| 624 | + assignUserRole({ | ||
| 625 | + userId: this.form.id, | ||
| 626 | + roleIds: this.form.roleIds, | ||
| 627 | + }).then(response => { | ||
| 628 | + this.msgSuccess("分配角色成功"); | ||
| 629 | + this.openRole = false; | ||
| 630 | + this.getList(); | ||
| 631 | + }); | ||
| 632 | + } | ||
| 633 | + }, | ||
| 584 | /** 删除按钮操作 */ | 634 | /** 删除按钮操作 */ |
| 585 | handleDelete(row) { | 635 | handleDelete(row) { |
| 586 | const ids = row.id || this.ids; | 636 | const ids = row.id || this.ids; |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/SysPermissionController.java
| @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.controller.permission; | @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.controller.permission; | ||
| 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; | 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO; | 4 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO; |
| 5 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleMenuReqVO; | 5 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleMenuReqVO; |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignUserRoleReqVO; | ||
| 6 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; | 7 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 7 | import io.swagger.annotations.Api; | 8 | import io.swagger.annotations.Api; |
| 8 | import io.swagger.annotations.ApiImplicitParam; | 9 | import io.swagger.annotations.ApiImplicitParam; |
| @@ -53,22 +54,20 @@ public class SysPermissionController { | @@ -53,22 +54,20 @@ public class SysPermissionController { | ||
| 53 | return success(true); | 54 | return success(true); |
| 54 | } | 55 | } |
| 55 | 56 | ||
| 56 | -// @GetMapping("/list-admin-roles") | ||
| 57 | -// @ApiOperation("获得管理员拥有的角色编号列表") | ||
| 58 | -//// @RequiresPermissions("system:permission:assign-admin-role") | ||
| 59 | -// @ApiImplicitParam(name = "adminId", value = "管理员编号", required = true) | ||
| 60 | -// public CommonResult<Set<Integer>> listAdminRoles(Integer adminId) { | ||
| 61 | -// return success(permissionManager.listAdminRoles(adminId)); | ||
| 62 | -// } | ||
| 63 | - | ||
| 64 | -// @PostMapping("/assign-admin-role") | ||
| 65 | -// @ApiOperation("赋予用户角色") | ||
| 66 | -//// @RequiresPermissions("system:permission:assign-admin-role") | ||
| 67 | -// public CommonResult<Boolean> assignAdminRole(PermissionAssignAdminRoleDTO assignAdminRoleDTO) { | ||
| 68 | -// permissionManager.assignAdminRole(assignAdminRoleDTO); | ||
| 69 | -// return success(true); | ||
| 70 | -// } | 57 | + @ApiOperation("获得管理员拥有的角色编号列表") |
| 58 | + @ApiImplicitParam(name = "userId", value = "用户编号", required = true) | ||
| 59 | + @GetMapping("/list-user-roles") | ||
| 60 | +// @RequiresPermissions("system:permission:assign-user-role") | ||
| 61 | + public CommonResult<Set<Long>> listAdminRoles(@RequestParam("userId") Long userId) { | ||
| 62 | + return success(permissionService.listUserRoleIs(userId)); | ||
| 63 | + } | ||
| 71 | 64 | ||
| 72 | -// system:permission:assign-role-data-scope TODO | 65 | + @ApiOperation("赋予用户角色") |
| 66 | + @PostMapping("/assign-user-role") | ||
| 67 | +// @RequiresPermissions("system:permission:assign-user-role") | ||
| 68 | + public CommonResult<Boolean> assignUserRole(@Validated @RequestBody SysPermissionAssignUserRoleReqVO reqVO) { | ||
| 69 | + permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds()); | ||
| 70 | + return success(true); | ||
| 71 | + } | ||
| 73 | 72 | ||
| 74 | } | 73 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/SysRoleController.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.permission; | 1 | package cn.iocoder.dashboard.modules.system.controller.permission; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||
| 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; | 4 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | import cn.iocoder.dashboard.common.pojo.PageResult; | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 5 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.*; | 6 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.*; |
| @@ -13,6 +14,9 @@ import org.springframework.validation.annotation.Validated; | @@ -13,6 +14,9 @@ import org.springframework.validation.annotation.Validated; | ||
| 13 | import org.springframework.web.bind.annotation.*; | 14 | import org.springframework.web.bind.annotation.*; |
| 14 | 15 | ||
| 15 | import javax.annotation.Resource; | 16 | import javax.annotation.Resource; |
| 17 | +import java.util.Collections; | ||
| 18 | +import java.util.Comparator; | ||
| 19 | +import java.util.List; | ||
| 16 | 20 | ||
| 17 | import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | 21 | import static cn.iocoder.dashboard.common.pojo.CommonResult.success; |
| 18 | 22 | ||
| @@ -31,6 +35,16 @@ public class SysRoleController { | @@ -31,6 +35,16 @@ public class SysRoleController { | ||
| 31 | return success(roleService.pageRole(reqVO)); | 35 | return success(roleService.pageRole(reqVO)); |
| 32 | } | 36 | } |
| 33 | 37 | ||
| 38 | + @ApiOperation(value = "获取角色精简信息列表", notes = "只包含被开启的角色,主要用于前端的下拉选项") | ||
| 39 | + @GetMapping("/list-all-simple") | ||
| 40 | + public CommonResult<List<SysRoleSimpleRespVO>> listSimpleRoles() { | ||
| 41 | + // 获得角色列表,只要开启状态的 | ||
| 42 | + List<SysRoleDO> list = roleService.listRoles(Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); | ||
| 43 | + // 排序后,返回个诶前端 | ||
| 44 | + list.sort(Comparator.comparing(SysRoleDO::getSort)); | ||
| 45 | + return success(SysRoleConvert.INSTANCE.convertList02(list)); | ||
| 46 | + } | ||
| 47 | + | ||
| 34 | @ApiOperation("创建角色") | 48 | @ApiOperation("创建角色") |
| 35 | @PostMapping("/create") | 49 | @PostMapping("/create") |
| 36 | // @PreAuthorize("@ss.hasPermi('system:role:add')") | 50 | // @PreAuthorize("@ss.hasPermi('system:role:add')") |
| @@ -85,29 +99,4 @@ public class SysRoleController { | @@ -85,29 +99,4 @@ public class SysRoleController { | ||
| 85 | return success(true); | 99 | return success(true); |
| 86 | } | 100 | } |
| 87 | 101 | ||
| 88 | -// | ||
| 89 | -// /** | ||
| 90 | -// * 修改保存数据权限 | ||
| 91 | -// */ | ||
| 92 | -// @PreAuthorize("@ss.hasPermi('system:role:edit')") | ||
| 93 | -// @Log(title = "角色管理", businessType = BusinessType.UPDATE) | ||
| 94 | -// @PutMapping("/dataScope") | ||
| 95 | -// public AjaxResult dataScope(@RequestBody SysRole role) | ||
| 96 | -// { | ||
| 97 | -// roleService.checkRoleAllowed(role); | ||
| 98 | -// return toAjax(roleService.authDataScope(role)); | ||
| 99 | -// } | ||
| 100 | - | ||
| 101 | - | ||
| 102 | -// | ||
| 103 | -// /** | ||
| 104 | -// * 获取角色选择框列表 | ||
| 105 | -// */ | ||
| 106 | -// @PreAuthorize("@ss.hasPermi('system:role:query')") | ||
| 107 | -// @GetMapping("/optionselect") | ||
| 108 | -// public AjaxResult optionselect() | ||
| 109 | -// { | ||
| 110 | -// return AjaxResult.success(roleService.selectRoleAll()); | ||
| 111 | -// } | ||
| 112 | - | ||
| 113 | } | 102 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.permission.vo.permission; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | +import java.util.Collections; | ||
| 9 | +import java.util.Set; | ||
| 10 | + | ||
| 11 | +@ApiModel("赋予用户角色 Request VO") | ||
| 12 | +@Data | ||
| 13 | +public class SysPermissionAssignUserRoleReqVO { | ||
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "角色编号", required = true, example = "1") | ||
| 16 | + @NotNull(message = "角色编号不能为空") | ||
| 17 | + private Long userId; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "角色编号列表", example = "1,3,5") | ||
| 20 | + private Set<Long> roleIds = Collections.emptySet(); // 兜底 | ||
| 21 | + | ||
| 22 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRoleSimpleRespVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.permission.vo.role; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.AllArgsConstructor; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.NoArgsConstructor; | ||
| 8 | + | ||
| 9 | +@ApiModel("角色精简信息 Response VO") | ||
| 10 | +@Data | ||
| 11 | +@NoArgsConstructor | ||
| 12 | +@AllArgsConstructor | ||
| 13 | +public class SysRoleSimpleRespVO { | ||
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "角色编号", required = true, example = "1024") | ||
| 16 | + private Integer id; | ||
| 17 | + | ||
| 18 | + @ApiModelProperty(value = "角色名称", required = true, example = "芋道") | ||
| 19 | + private String name; | ||
| 20 | + | ||
| 21 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/convert/permission/SysRoleConvert.java
| @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.convert.permission; | @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.convert.permission; | ||
| 3 | import cn.iocoder.dashboard.common.pojo.PageResult; | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; | 4 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; |
| 5 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleRespVO; | 5 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleRespVO; |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleSimpleRespVO; | ||
| 6 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | 7 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; |
| 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 8 | import com.baomidou.mybatisplus.core.metadata.IPage; | 9 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| @@ -10,6 +11,8 @@ import org.mapstruct.Mapper; | @@ -10,6 +11,8 @@ import org.mapstruct.Mapper; | ||
| 10 | import org.mapstruct.Mapping; | 11 | import org.mapstruct.Mapping; |
| 11 | import org.mapstruct.factory.Mappers; | 12 | import org.mapstruct.factory.Mappers; |
| 12 | 13 | ||
| 14 | +import java.util.List; | ||
| 15 | + | ||
| 13 | @Mapper | 16 | @Mapper |
| 14 | public interface SysRoleConvert { | 17 | public interface SysRoleConvert { |
| 15 | 18 | ||
| @@ -24,4 +27,6 @@ public interface SysRoleConvert { | @@ -24,4 +27,6 @@ public interface SysRoleConvert { | ||
| 24 | 27 | ||
| 25 | SysRoleDO convert(SysRoleCreateReqVO bean); | 28 | SysRoleDO convert(SysRoleCreateReqVO bean); |
| 26 | 29 | ||
| 30 | + List<SysRoleSimpleRespVO> convertList02(List<SysRoleDO> list); | ||
| 31 | + | ||
| 27 | } | 32 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/permission/SysRoleMapper.java
| @@ -8,6 +8,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | @@ -8,6 +8,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
| 8 | import com.baomidou.mybatisplus.core.metadata.IPage; | 8 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 9 | import org.apache.ibatis.annotations.Mapper; | 9 | import org.apache.ibatis.annotations.Mapper; |
| 10 | 10 | ||
| 11 | +import javax.annotation.Nullable; | ||
| 12 | +import java.util.Collection; | ||
| 13 | +import java.util.List; | ||
| 14 | + | ||
| 11 | @Mapper | 15 | @Mapper |
| 12 | public interface SysRoleMapper extends BaseMapper<SysRoleDO> { | 16 | public interface SysRoleMapper extends BaseMapper<SysRoleDO> { |
| 13 | 17 | ||
| @@ -27,5 +31,7 @@ public interface SysRoleMapper extends BaseMapper<SysRoleDO> { | @@ -27,5 +31,7 @@ public interface SysRoleMapper extends BaseMapper<SysRoleDO> { | ||
| 27 | return selectOne(new QueryWrapperX<SysRoleDO>().eq("code", code)); | 31 | return selectOne(new QueryWrapperX<SysRoleDO>().eq("code", code)); |
| 28 | } | 32 | } |
| 29 | 33 | ||
| 30 | - | 34 | + default List<SysRoleDO> selectListByStatus(@Nullable Collection<Integer> statuses) { |
| 35 | + return selectList(new QueryWrapperX<SysRoleDO>().in("status", statuses)); | ||
| 36 | + } | ||
| 31 | } | 37 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/permission/SysUserRoleMapper.java
| @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
| 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 6 | import org.apache.ibatis.annotations.Mapper; | 6 | import org.apache.ibatis.annotations.Mapper; |
| 7 | 7 | ||
| 8 | +import java.util.Collection; | ||
| 8 | import java.util.List; | 9 | import java.util.List; |
| 10 | +import java.util.stream.Collectors; | ||
| 9 | 11 | ||
| 10 | @Mapper | 12 | @Mapper |
| 11 | public interface SysUserRoleMapper extends BaseMapper<SysUserRoleDO> { | 13 | public interface SysUserRoleMapper extends BaseMapper<SysUserRoleDO> { |
| @@ -14,4 +16,20 @@ public interface SysUserRoleMapper extends BaseMapper<SysUserRoleDO> { | @@ -14,4 +16,20 @@ public interface SysUserRoleMapper extends BaseMapper<SysUserRoleDO> { | ||
| 14 | return selectList(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId)); | 16 | return selectList(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId)); |
| 15 | } | 17 | } |
| 16 | 18 | ||
| 19 | + default void insertList(Long userId, Collection<Long> roleIds) { | ||
| 20 | + List<SysUserRoleDO> list = roleIds.stream().map(roleId -> { | ||
| 21 | + SysUserRoleDO entity = new SysUserRoleDO(); | ||
| 22 | + entity.setUserId(userId); | ||
| 23 | + entity.setRoleId(roleId); | ||
| 24 | + return entity; | ||
| 25 | + }).collect(Collectors.toList()); | ||
| 26 | + // TODO 芋艿,mybatis plus 增加批量插入的功能 | ||
| 27 | + list.forEach(this::insert); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + default void deleteListByUserIdAndRoleIdIds(Long userId, Collection<Long> roleIds) { | ||
| 31 | + delete(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId) | ||
| 32 | + .in("role_id", roleIds)); | ||
| 33 | + } | ||
| 34 | + | ||
| 17 | } | 35 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysPermissionService.java
| @@ -60,6 +60,22 @@ public interface SysPermissionService { | @@ -60,6 +60,22 @@ public interface SysPermissionService { | ||
| 60 | void assignRoleMenu(Long roleId, Set<Long> menuIds); | 60 | void assignRoleMenu(Long roleId, Set<Long> menuIds); |
| 61 | 61 | ||
| 62 | /** | 62 | /** |
| 63 | + * 获得用户拥有的角色编号集合 | ||
| 64 | + * | ||
| 65 | + * @param userId 用户编号 | ||
| 66 | + * @return 角色编号集合 | ||
| 67 | + */ | ||
| 68 | + Set<Long> listUserRoleIs(Long userId); | ||
| 69 | + | ||
| 70 | + /** | ||
| 71 | + * 设置用户角色 | ||
| 72 | + * | ||
| 73 | + * @param userId 角色编号 | ||
| 74 | + * @param roleIds 角色编号集合 | ||
| 75 | + */ | ||
| 76 | + void assignUserRole(Long userId, Set<Long> roleIds); | ||
| 77 | + | ||
| 78 | + /** | ||
| 63 | * 设置角色的数据权限 | 79 | * 设置角色的数据权限 |
| 64 | * | 80 | * |
| 65 | * @param roleId 角色编号 | 81 | * @param roleId 角色编号 |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysRoleService.java
| @@ -6,6 +6,7 @@ import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRole | @@ -6,6 +6,7 @@ import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRole | ||
| 6 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | 6 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; |
| 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 8 | 8 | ||
| 9 | +import javax.annotation.Nullable; | ||
| 9 | import java.util.Collection; | 10 | import java.util.Collection; |
| 10 | import java.util.List; | 11 | import java.util.List; |
| 11 | import java.util.Set; | 12 | import java.util.Set; |
| @@ -31,6 +32,14 @@ public interface SysRoleService { | @@ -31,6 +32,14 @@ public interface SysRoleService { | ||
| 31 | SysRoleDO getRoleFromCache(Long id); | 32 | SysRoleDO getRoleFromCache(Long id); |
| 32 | 33 | ||
| 33 | /** | 34 | /** |
| 35 | + * 获得角色列表 | ||
| 36 | + * | ||
| 37 | + * @param statuses 筛选的状态。允许空,空时不筛选 | ||
| 38 | + * @return 角色列表 | ||
| 39 | + */ | ||
| 40 | + List<SysRoleDO> listRoles(@Nullable Collection<Integer> statuses); | ||
| 41 | + | ||
| 42 | + /** | ||
| 34 | * 获得角色数组,从缓存中 | 43 | * 获得角色数组,从缓存中 |
| 35 | * | 44 | * |
| 36 | * @param ids 角色编号数组 | 45 | * @param ids 角色编号数组 |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
| @@ -143,6 +143,29 @@ public class SysPermissionServiceImpl implements SysPermissionService { | @@ -143,6 +143,29 @@ public class SysPermissionServiceImpl implements SysPermissionService { | ||
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | @Override | 145 | @Override |
| 146 | + public Set<Long> listUserRoleIs(Long userId) { | ||
| 147 | + return CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId), | ||
| 148 | + SysUserRoleDO::getRoleId); | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + @Override | ||
| 152 | + public void assignUserRole(Long userId, Set<Long> roleIds) { | ||
| 153 | + // 获得角色拥有角色编号 | ||
| 154 | + Set<Long> dbRoleIds = CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId), | ||
| 155 | + SysUserRoleDO::getRoleId); | ||
| 156 | + // 计算新增和删除的角色编号 | ||
| 157 | + Collection<Long> createRoleIds = CollUtil.subtract(roleIds, dbRoleIds); | ||
| 158 | + Collection<Long> deleteMenuIds = CollUtil.subtract(dbRoleIds, roleIds); | ||
| 159 | + // 执行新增和删除。对于已经授权的角色,不用做任何处理 | ||
| 160 | + if (!CollectionUtil.isEmpty(createRoleIds)) { | ||
| 161 | + userRoleMapper.insertList(userId, createRoleIds); | ||
| 162 | + } | ||
| 163 | + if (!CollectionUtil.isEmpty(deleteMenuIds)) { | ||
| 164 | + userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteMenuIds); | ||
| 165 | + } | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + @Override | ||
| 146 | public void assignRoleDataScope(Long roleId, Integer dataScope, Set<Long> dataScopeDeptIds) { | 169 | public void assignRoleDataScope(Long roleId, Integer dataScope, Set<Long> dataScopeDeptIds) { |
| 147 | roleService.updateRoleDataScope(roleId, dataScope, dataScopeDeptIds); | 170 | roleService.updateRoleDataScope(roleId, dataScope, dataScopeDeptIds); |
| 148 | } | 171 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
| @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; | @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; | ||
| 21 | import org.springframework.transaction.annotation.Transactional; | 21 | import org.springframework.transaction.annotation.Transactional; |
| 22 | import org.springframework.util.StringUtils; | 22 | import org.springframework.util.StringUtils; |
| 23 | 23 | ||
| 24 | +import javax.annotation.Nullable; | ||
| 24 | import javax.annotation.PostConstruct; | 25 | import javax.annotation.PostConstruct; |
| 25 | import javax.annotation.Resource; | 26 | import javax.annotation.Resource; |
| 26 | import java.util.*; | 27 | import java.util.*; |
| @@ -72,6 +73,11 @@ public class SysRoleServiceImpl implements SysRoleService { | @@ -72,6 +73,11 @@ public class SysRoleServiceImpl implements SysRoleService { | ||
| 72 | } | 73 | } |
| 73 | 74 | ||
| 74 | @Override | 75 | @Override |
| 76 | + public List<SysRoleDO> listRoles(@Nullable Collection<Integer> statuses) { | ||
| 77 | + return roleMapper.selectListByStatus(statuses); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + @Override | ||
| 75 | public List<SysRoleDO> listRolesFromCache(Collection<Long> ids) { | 81 | public List<SysRoleDO> listRolesFromCache(Collection<Long> ids) { |
| 76 | if (CollectionUtil.isEmpty(ids)) { | 82 | if (CollectionUtil.isEmpty(ids)) { |
| 77 | return Collections.emptyList(); | 83 | return Collections.emptyList(); |