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 | 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 | 38 | export function assignRoleDataScope(data) { |
| 22 | 39 | return request({ | ... | ... |
ruoyi-ui/src/api/system/role.js
| ... | ... | @@ -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 | 21 | export function getRole(roleId) { |
| 14 | 22 | return request({ | ... | ... |
ruoyi-ui/src/views/system/user/index.vue
| ... | ... | @@ -163,6 +163,13 @@ |
| 163 | 163 | @click="handleResetPwd(scope.row)" |
| 164 | 164 | v-hasPermi="['system:user:resetPwd']" |
| 165 | 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 | 173 | </template> |
| 167 | 174 | </el-table-column> |
| 168 | 175 | </el-table> |
| ... | ... | @@ -290,31 +297,30 @@ |
| 290 | 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 | 325 | </div> |
| 320 | 326 | </template> |
| ... | ... | @@ -330,6 +336,8 @@ import {listSimplePosts} from "@/api/system/post"; |
| 330 | 336 | |
| 331 | 337 | import {SysCommonStatusEnum} from "@/utils/constants"; |
| 332 | 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 | 342 | export default { |
| 335 | 343 | name: "User", |
| ... | ... | @@ -420,6 +428,8 @@ export default { |
| 420 | 428 | } |
| 421 | 429 | ] |
| 422 | 430 | }, |
| 431 | + // 是否显示弹出层(角色权限) | |
| 432 | + openRole: false, | |
| 423 | 433 | |
| 424 | 434 | // 枚举 |
| 425 | 435 | SysCommonStatusEnum: SysCommonStatusEnum, |
| ... | ... | @@ -499,6 +509,11 @@ export default { |
| 499 | 509 | this.open = false; |
| 500 | 510 | this.reset(); |
| 501 | 511 | }, |
| 512 | + // 取消按钮(角色权限) | |
| 513 | + cancelMenu() { | |
| 514 | + this.openRole = false; | |
| 515 | + this.reset(); | |
| 516 | + }, | |
| 502 | 517 | // 表单重置 |
| 503 | 518 | reset() { |
| 504 | 519 | this.form = { |
| ... | ... | @@ -561,6 +576,28 @@ export default { |
| 561 | 576 | }); |
| 562 | 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 | 602 | submitForm: function() { |
| 566 | 603 | this.$refs["form"].validate(valid => { |
| ... | ... | @@ -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 | 635 | handleDelete(row) { |
| 586 | 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 | 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | 4 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO; |
| 5 | 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 | 7 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 7 | 8 | import io.swagger.annotations.Api; |
| 8 | 9 | import io.swagger.annotations.ApiImplicitParam; |
| ... | ... | @@ -53,22 +54,20 @@ public class SysPermissionController { |
| 53 | 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 | 1 | package cn.iocoder.dashboard.modules.system.controller.permission; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | |
| 3 | 4 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 5 | 6 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.*; |
| ... | ... | @@ -13,6 +14,9 @@ import org.springframework.validation.annotation.Validated; |
| 13 | 14 | import org.springframework.web.bind.annotation.*; |
| 14 | 15 | |
| 15 | 16 | import javax.annotation.Resource; |
| 17 | +import java.util.Collections; | |
| 18 | +import java.util.Comparator; | |
| 19 | +import java.util.List; | |
| 16 | 20 | |
| 17 | 21 | import static cn.iocoder.dashboard.common.pojo.CommonResult.success; |
| 18 | 22 | |
| ... | ... | @@ -31,6 +35,16 @@ public class SysRoleController { |
| 31 | 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 | 48 | @ApiOperation("创建角色") |
| 35 | 49 | @PostMapping("/create") |
| 36 | 50 | // @PreAuthorize("@ss.hasPermi('system:role:add')") |
| ... | ... | @@ -85,29 +99,4 @@ public class SysRoleController { |
| 85 | 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 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; |
| 5 | 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 | 7 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; |
| 7 | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 8 | 9 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| ... | ... | @@ -10,6 +11,8 @@ import org.mapstruct.Mapper; |
| 10 | 11 | import org.mapstruct.Mapping; |
| 11 | 12 | import org.mapstruct.factory.Mappers; |
| 12 | 13 | |
| 14 | +import java.util.List; | |
| 15 | + | |
| 13 | 16 | @Mapper |
| 14 | 17 | public interface SysRoleConvert { |
| 15 | 18 | |
| ... | ... | @@ -24,4 +27,6 @@ public interface SysRoleConvert { |
| 24 | 27 | |
| 25 | 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 | 8 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 9 | 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 | 15 | @Mapper |
| 12 | 16 | public interface SysRoleMapper extends BaseMapper<SysRoleDO> { |
| 13 | 17 | |
| ... | ... | @@ -27,5 +31,7 @@ public interface SysRoleMapper extends BaseMapper<SysRoleDO> { |
| 27 | 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 | 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 6 | 6 | import org.apache.ibatis.annotations.Mapper; |
| 7 | 7 | |
| 8 | +import java.util.Collection; | |
| 8 | 9 | import java.util.List; |
| 10 | +import java.util.stream.Collectors; | |
| 9 | 11 | |
| 10 | 12 | @Mapper |
| 11 | 13 | public interface SysUserRoleMapper extends BaseMapper<SysUserRoleDO> { |
| ... | ... | @@ -14,4 +16,20 @@ public interface SysUserRoleMapper extends BaseMapper<SysUserRoleDO> { |
| 14 | 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 | 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 | 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 | import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 8 | 8 | |
| 9 | +import javax.annotation.Nullable; | |
| 9 | 10 | import java.util.Collection; |
| 10 | 11 | import java.util.List; |
| 11 | 12 | import java.util.Set; |
| ... | ... | @@ -31,6 +32,14 @@ public interface SysRoleService { |
| 31 | 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 | 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 | 143 | } |
| 144 | 144 | |
| 145 | 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 | 169 | public void assignRoleDataScope(Long roleId, Integer dataScope, Set<Long> dataScopeDeptIds) { |
| 147 | 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 | 21 | import org.springframework.transaction.annotation.Transactional; |
| 22 | 22 | import org.springframework.util.StringUtils; |
| 23 | 23 | |
| 24 | +import javax.annotation.Nullable; | |
| 24 | 25 | import javax.annotation.PostConstruct; |
| 25 | 26 | import javax.annotation.Resource; |
| 26 | 27 | import java.util.*; |
| ... | ... | @@ -72,6 +73,11 @@ public class SysRoleServiceImpl implements SysRoleService { |
| 72 | 73 | } |
| 73 | 74 | |
| 74 | 75 | @Override |
| 76 | + public List<SysRoleDO> listRoles(@Nullable Collection<Integer> statuses) { | |
| 77 | + return roleMapper.selectListByStatus(statuses); | |
| 78 | + } | |
| 79 | + | |
| 80 | + @Override | |
| 75 | 81 | public List<SysRoleDO> listRolesFromCache(Collection<Long> ids) { |
| 76 | 82 | if (CollectionUtil.isEmpty(ids)) { |
| 77 | 83 | return Collections.emptyList(); | ... | ... |