Commit 1bfaa2c967859a946460b9ff397d3b1f827d0173

Authored by YunaiV
1 parent 04feb57e

完成 Role 模块的迁移

Showing 26 changed files with 151 additions and 361 deletions
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
1 1 package com.ruoyi.system.mapper;
2 2  
3 3 import java.util.List;
  4 +
4 5 import org.apache.ibatis.annotations.Param;
5 6 import com.ruoyi.common.core.domain.entity.SysMenu;
6 7  
... ... @@ -9,22 +10,7 @@ import com.ruoyi.common.core.domain.entity.SysMenu;
9 10 *
10 11 * @author ruoyi
11 12 */
12   -public interface SysMenuMapper
13   -{
14   - /**
15   - * 查询系统菜单列表
16   - *
17   - * @param menu 菜单信息
18   - * @return 菜单列表
19   - */
20   - public List<SysMenu> selectMenuList(SysMenu menu);
21   -
22   - /**
23   - * 根据用户所有权限
24   - *
25   - * @return 权限列表
26   - */
27   - public List<String> selectMenuPerms();
  13 +public interface SysMenuMapper {
28 14  
29 15 /**
30 16 * 根据用户查询系统菜单列表
... ... @@ -60,7 +46,7 @@ public interface SysMenuMapper
60 46 /**
61 47 * 根据角色ID查询菜单树信息
62 48 *
63   - * @param roleId 角色ID
  49 + * @param roleId 角色ID
64 50 * @param menuCheckStrictly 菜单树选择项是否关联显示
65 51 * @return 选中菜单列表
66 52 */
... ...
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
1 1 package com.ruoyi.system.mapper;
2 2  
3 3 import java.util.List;
  4 +
4 5 import com.ruoyi.common.core.domain.entity.SysRole;
5 6  
6 7 /**
7 8 * 角色表 数据层
8   - *
  9 + *
9 10 * @author ruoyi
10 11 */
11   -public interface SysRoleMapper
12   -{
  12 +public interface SysRoleMapper {
  13 +
13 14 /**
14 15 * 根据条件分页查询角色数据
15   - *
  16 + *
16 17 * @param role 角色信息
17 18 * @return 角色数据集合信息
18 19 */
... ... @@ -20,88 +21,26 @@ public interface SysRoleMapper
20 21  
21 22 /**
22 23 * 根据用户ID查询角色
23   - *
  24 + *
24 25 * @param userId 用户ID
25 26 * @return 角色列表
26 27 */
27 28 public List<SysRole> selectRolePermissionByUserId(Long userId);
28 29  
29 30 /**
30   - * 查询所有角色
31   - *
32   - * @return 角色列表
33   - */
34   - public List<SysRole> selectRoleAll();
35   -
36   - /**
37 31 * 根据用户ID获取角色选择框列表
38   - *
  32 + *
39 33 * @param userId 用户ID
40 34 * @return 选中角色ID列表
41 35 */
42 36 public List<Integer> selectRoleListByUserId(Long userId);
43 37  
44 38 /**
45   - * 通过角色ID查询角色
46   - *
47   - * @param roleId 角色ID
48   - * @return 角色对象信息
49   - */
50   - public SysRole selectRoleById(Long roleId);
51   -
52   - /**
53 39 * 根据用户ID查询角色
54   - *
  40 + *
55 41 * @param userName 用户名
56 42 * @return 角色列表
57 43 */
58 44 public List<SysRole> selectRolesByUserName(String userName);
59 45  
60   - /**
61   - * 校验角色名称是否唯一
62   - *
63   - * @param roleName 角色名称
64   - * @return 角色信息
65   - */
66   - public SysRole checkRoleNameUnique(String roleName);
67   -
68   - /**
69   - * 校验角色权限是否唯一
70   - *
71   - * @param roleKey 角色权限
72   - * @return 角色信息
73   - */
74   - public SysRole checkRoleKeyUnique(String roleKey);
75   -
76   - /**
77   - * 修改角色信息
78   - *
79   - * @param role 角色信息
80   - * @return 结果
81   - */
82   - public int updateRole(SysRole role);
83   -
84   - /**
85   - * 新增角色信息
86   - *
87   - * @param role 角色信息
88   - * @return 结果
89   - */
90   - public int insertRole(SysRole role);
91   -
92   - /**
93   - * 通过角色ID删除角色
94   - *
95   - * @param roleId 角色ID
96   - * @return 结果
97   - */
98   - public int deleteRoleById(Long roleId);
99   -
100   - /**
101   - * 批量删除角色信息
102   - *
103   - * @param roleIds 需要删除的角色ID
104   - * @return 结果
105   - */
106   - public int deleteRoleByIds(Long[] roleIds);
107 46 }
... ...
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java deleted
1   -package com.ruoyi.system.mapper;
2   -
3   -import java.util.List;
4   -import com.ruoyi.system.domain.SysRoleMenu;
5   -
6   -/**
7   - * 角色与菜单关联表 数据层
8   - *
9   - * @author ruoyi
10   - */
11   -public interface SysRoleMenuMapper
12   -{
13   - /**
14   - * 查询菜单使用数量
15   - *
16   - * @param menuId 菜单ID
17   - * @return 结果
18   - */
19   - public int checkMenuExistRole(Long menuId);
20   -
21   - /**
22   - * 通过角色ID删除角色和菜单关联
23   - *
24   - * @param roleId 角色ID
25   - * @return 结果
26   - */
27   - public int deleteRoleMenuByRoleId(Long roleId);
28   -
29   - /**
30   - * 批量删除角色菜单关联信息
31   - *
32   - * @param ids 需要删除的数据ID
33   - * @return 结果
34   - */
35   - public int deleteRoleMenu(Long[] ids);
36   -
37   - /**
38   - * 批量新增角色菜单信息
39   - *
40   - * @param roleMenuList 角色菜单列表
41   - * @return 结果
42   - */
43   - public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
44   -}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java deleted
1   -package com.ruoyi.system.mapper;
2   -
3   -import java.util.List;
4   -import org.apache.ibatis.annotations.Param;
5   -import com.ruoyi.system.domain.SysUserRole;
6   -
7   -/**
8   - * 用户与角色关联表 数据层
9   - *
10   - * @author ruoyi
11   - */
12   -public interface SysUserRoleMapper
13   -{
14   - /**
15   - * 通过用户ID删除用户和角色关联
16   - *
17   - * @param userId 用户ID
18   - * @return 结果
19   - */
20   - public int deleteUserRoleByUserId(Long userId);
21   -
22   - /**
23   - * 批量删除用户和角色关联
24   - *
25   - * @param ids 需要删除的数据ID
26   - * @return 结果
27   - */
28   - public int deleteUserRole(Long[] ids);
29   -
30   - /**
31   - * 通过角色ID查询角色使用数量
32   - *
33   - * @param roleId 角色ID
34   - * @return 结果
35   - */
36   - public int countUserRoleByRoleId(Long roleId);
37   -
38   - /**
39   - * 批量新增用户角色信息
40   - *
41   - * @param userRoleList 用户角色列表
42   - * @return 结果
43   - */
44   - public int batchUserRole(List<SysUserRole> userRoleList);
45   -
46   - /**
47   - * 删除用户和角色关联信息
48   - *
49   - * @param userRole 用户和角色关联信息
50   - * @return 结果
51   - */
52   - public int deleteUserRoleInfo(SysUserRole userRole);
53   -
54   - /**
55   - * 批量取消授权用户角色
56   - *
57   - * @param roleId 角色ID
58   - * @param userIds 需要删除的用户数据ID
59   - * @return 结果
60   - */
61   - public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
62   -}
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
... ... @@ -4,22 +4,6 @@
4 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 5 <mapper namespace="com.ruoyi.system.mapper.SysMenuMapper">
6 6  
7   - <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
8   - <include refid="selectMenuVo"/>
9   - <where>
10   - <if test="menuName != null and menuName != ''">
11   - AND menu_name like concat('%', #{menuName}, '%')
12   - </if>
13   - <if test="visible != null and visible != ''">
14   - AND visible = #{visible}
15   - </if>
16   - <if test="status != null and status != ''">
17   - AND status = #{status}
18   - </if>
19   - </where>
20   - order by parent_id, order_num
21   - </select>
22   -
23 7 <select id="selectMenuTreeAll" resultMap="SysMenuResult">
24 8 select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
25 9 from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0
... ... @@ -67,13 +51,6 @@
67 51 order by m.parent_id, m.order_num
68 52 </select>
69 53  
70   - <select id="selectMenuPerms" resultType="String">
71   - select distinct m.perms
72   - from sys_menu m
73   - left join sys_role_menu rm on m.menu_id = rm.menu_id
74   - left join sys_user_role ur on rm.role_id = ur.role_id
75   - </select>
76   -
77 54 <select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
78 55 select distinct m.perms
79 56 from sys_menu m
... ... @@ -83,13 +60,4 @@
83 60 where m.status = '0' and r.status = '0' and ur.user_id = #{userId}
84 61 </select>
85 62  
86   - <select id="hasChildByMenuId" resultType="Integer">
87   - select count(1) from sys_menu where parent_id = #{menuId}
88   - </select>
89   -
90   - <select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
91   - <include refid="selectMenuVo"/>
92   - where menu_name=#{menuName} and parent_id = #{parentId} limit 1
93   - </select>
94   -
95 63 </mapper>
... ...
ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml deleted
1   -<?xml version="1.0" encoding="UTF-8" ?>
2   -<!DOCTYPE mapper
3   -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4   -"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5   -<mapper namespace="com.ruoyi.system.mapper.SysRoleMenuMapper">
6   -
7   - <resultMap type="SysRoleMenu" id="SysRoleMenuResult">
8   - <result property="roleId" column="role_id" />
9   - <result property="menuId" column="menu_id" />
10   - </resultMap>
11   -
12   - <select id="checkMenuExistRole" resultType="Integer">
13   - select count(1) from sys_role_menu where menu_id = #{menuId}
14   - </select>
15   -
16   - <delete id="deleteRoleMenuByRoleId" parameterType="Long">
17   - delete from sys_role_menu where role_id=#{roleId}
18   - </delete>
19   -
20   - <delete id="deleteRoleMenu" parameterType="Long">
21   - delete from sys_role_menu where role_id in
22   - <foreach collection="array" item="roleId" open="(" separator="," close=")">
23   - #{roleId}
24   - </foreach>
25   - </delete>
26   -
27   - <insert id="batchRoleMenu">
28   - insert into sys_role_menu(role_id, menu_id) values
29   - <foreach item="item" index="index" collection="list" separator=",">
30   - (#{item.roleId},#{item.menuId})
31   - </foreach>
32   - </insert>
33   -
34   -</mapper>
35 0 \ No newline at end of file
ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml deleted
1   -<?xml version="1.0" encoding="UTF-8" ?>
2   -<!DOCTYPE mapper
3   -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4   -"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5   -<mapper namespace="com.ruoyi.system.mapper.SysUserRoleMapper">
6   -
7   - <resultMap type="SysUserRole" id="SysUserRoleResult">
8   - <result property="userId" column="user_id" />
9   - <result property="roleId" column="role_id" />
10   - </resultMap>
11   -
12   - <delete id="deleteUserRoleByUserId" parameterType="Long">
13   - delete from sys_user_role where user_id=#{userId}
14   - </delete>
15   -
16   - <select id="countUserRoleByRoleId" resultType="Integer">
17   - select count(1) from sys_user_role where role_id=#{roleId}
18   - </select>
19   -
20   - <delete id="deleteUserRole" parameterType="Long">
21   - delete from sys_user_role where user_id in
22   - <foreach collection="array" item="userId" open="(" separator="," close=")">
23   - #{userId}
24   - </foreach>
25   - </delete>
26   -
27   - <insert id="batchUserRole">
28   - insert into sys_user_role(user_id, role_id) values
29   - <foreach item="item" index="index" collection="list" separator=",">
30   - (#{item.userId},#{item.roleId})
31   - </foreach>
32   - </insert>
33   -
34   - <delete id="deleteUserRoleInfo" parameterType="SysUserRole">
35   - delete from sys_user_role where user_id=#{userId} and role_id=#{roleId}
36   - </delete>
37   -
38   - <delete id="deleteUserRoleInfos">
39   - delete from sys_user_role where role_id=#{roleId} and user_id in
40   - <foreach collection="userIds" item="userId" open="(" separator="," close=")">
41   - #{userId}
42   - </foreach>
43   - </delete>
44   -</mapper>
45 0 \ No newline at end of file
ruoyi-ui/src/api/system/dept.js
... ... @@ -25,24 +25,6 @@ export function getDept(deptId) {
25 25 })
26 26 }
27 27  
28   -// 查询部门下拉树结构
29   -// TODO 准备删除
30   -export function treeselect() {
31   - return request({
32   - url: '/system/dept/treeselect',
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 根据角色ID查询部门树结构
38   -// TODO 准备删除
39   -export function roleDeptTreeselect(roleId) {
40   - return request({
41   - url: '/system/dept/roleDeptTreeselect/' + roleId,
42   - method: 'get'
43   - })
44   -}
45   -
46 28 // 获取部门精简信息列表
47 29 export function listSimpleDepts() {
48 30 return request({
... ... @@ -76,3 +58,6 @@ export function delDept(deptId) {
76 58 method: 'delete'
77 59 })
78 60 }
  61 +
  62 +export class treeselect {
  63 +}
... ...
ruoyi-ui/src/api/system/permission.js
... ... @@ -16,3 +16,12 @@ export function assignRoleMenu(data) {
16 16 data: data
17 17 })
18 18 }
  19 +
  20 +// 赋予角色数据权限
  21 +export function assignRoleDataScope(data) {
  22 + return request({
  23 + url: '/system/permission/assign-role-data-scope',
  24 + method: 'post',
  25 + data: data
  26 + })
  27 +}
... ...
ruoyi-ui/src/api/system/role.js
... ... @@ -35,15 +35,6 @@ export function updateRole(data) {
35 35 })
36 36 }
37 37  
38   -// 角色数据权限
39   -export function dataScope(data) {
40   - return request({
41   - url: '/system/role/dataScope',
42   - method: 'put',
43   - data: data
44   - })
45   -}
46   -
47 38 // 角色状态修改
48 39 export function changeRoleStatus(id, status) {
49 40 const data = {
... ...
ruoyi-ui/src/utils/constants.js
... ... @@ -30,7 +30,7 @@ export const SysRoleTypeEnum = {
30 30 }
31 31  
32 32 /**
33   - * 数据权限的泛微枚举
  33 + * 数据权限的范围枚举
34 34 */
35 35 export const SysDataScopeEnum = {
36 36 ALL: 1, // 全部数据权限
... ...
ruoyi-ui/src/utils/ruoyi.js
... ... @@ -55,15 +55,15 @@ export function resetForm(refName) {
55 55  
56 56 // 添加日期范围
57 57 export function addDateRange(params, dateRange, propName) {
58   - var search = params;
59   - search.params = {};
60   - if (null != dateRange && '' != dateRange) {
  58 + const search = params;
  59 + search.params = {};
  60 + if (null != dateRange && '' !== dateRange) {
61 61 if (typeof(propName) === "undefined") {
62   - search.params["beginTime"] = dateRange[0];
63   - search.params["endTime"] = dateRange[1];
  62 + search["beginTime"] = dateRange[0];
  63 + search["endTime"] = dateRange[1];
64 64 } else {
65   - search.params["begin" + propName] = dateRange[0];
66   - search.params["end" + propName] = dateRange[1];
  65 + search["begin" + propName] = dateRange[0];
  66 + search["end" + propName] = dateRange[1];
67 67 }
68 68 }
69 69 return search;
... ...
ruoyi-ui/src/views/system/role/index.vue
... ... @@ -248,8 +248,8 @@ import {
248 248 updateRole
249 249 } from "@/api/system/role";
250 250 import {listSimpleMenus} from "@/api/system/menu";
251   -import {assignRoleMenu, listRoleMenus} from "@/api/system/permission";
252   -import {listSimpleDepts, treeselect as deptTreeselect} from "@/api/system/dept";
  251 +import {assignRoleMenu, listRoleMenus, assignRoleDataScope} from "@/api/system/permission";
  252 +import {listSimpleDepts} from "@/api/system/dept";
253 253 import {SysCommonStatusEnum, SysDataScopeEnum} from "@/utils/constants";
254 254 import {DICT_TYPE, getDictDataLabel, getDictDatas} from "@/utils/dict";
255 255  
... ... @@ -326,7 +326,10 @@ export default {
326 326 /** 查询角色列表 */
327 327 getList() {
328 328 this.loading = true;
329   - listRole(this.addDateRange(this.queryParams, this.dateRange)).then(
  329 + listRole(this.addDateRange(this.queryParams, [
  330 + this.dateRange[0] ? this.dateRange[0] + ' 00:00:00' : undefined,
  331 + this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined,
  332 + ])).then(
330 333 response => {
331 334 this.roleList = response.data.list;
332 335 this.total = response.data.total;
... ... @@ -387,6 +390,7 @@ export default {
387 390 sort: 0,
388 391 deptIds: [],
389 392 menuIds: [],
  393 + dataScope: undefined,
390 394 deptCheckStrictly: false,
391 395 remark: undefined
392 396 };
... ... @@ -485,11 +489,11 @@ export default {
485 489 // 处理 menuOptions 参数
486 490 this.deptOptions = [];
487 491 this.deptOptions.push(...this.handleTree(response.data, "id"));
488   - });
489   - // 获得角色拥有的数据权限
490   - getRole(row.id).then(response => {
491   - // TODO 搞一搞
492   - // this.$refs.dept.setCheckedKeys(res.checkedKeys);
  492 + // 获得角色拥有的数据权限
  493 + getRole(row.id).then(response => {
  494 + this.form.dataScope = response.data.dataScope;
  495 + this.$refs.dept.setCheckedKeys(response.data.dataScopeDeptIds, false);
  496 + });
493 497 });
494 498 },
495 499 /** 提交按钮 */
... ... @@ -515,11 +519,10 @@ export default {
515 519 /** 提交按钮(数据权限) */
516 520 submitDataScope: function() {
517 521 if (this.form.id !== undefined) {
518   - // this.form.deptIds = this.getDeptAllCheckedKeys();
519   - debugger
520   - dataScope({
  522 + assignRoleDataScope({
521 523 roleId: this.form.id,
522   - deptIds: this.form.dataScope !== SysDataScopeEnum.DEPT_CUSTOM ? [] :
  524 + dataScope: this.form.dataScope,
  525 + dataScopeDeptIds: this.form.dataScope !== SysDataScopeEnum.DEPT_CUSTOM ? [] :
523 526 this.$refs.dept.getCheckedKeys(false)
524 527 }).then(response => {
525 528 this.msgSuccess("修改成功");
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/SysPermissionController.java
1 1 package cn.iocoder.dashboard.modules.system.controller.permission;
2 2  
3 3 import cn.iocoder.dashboard.common.pojo.CommonResult;
  4 +import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO;
4 5 import cn.iocoder.dashboard.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleMenuReqVO;
5 6 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
6 7 import io.swagger.annotations.Api;
... ... @@ -43,6 +44,15 @@ public class SysPermissionController {
43 44 return success(true);
44 45 }
45 46  
  47 + @PostMapping("/assign-role-data-scope")
  48 + @ApiOperation("赋予角色数据权限")
  49 +// @RequiresPermissions("system:permission:assign-role-data-scope")
  50 + public CommonResult<Boolean> assignRoleDataScope(
  51 + @Validated @RequestBody SysPermissionAssignRoleDataScopeReqVO reqVO) {
  52 + permissionService.assignRoleDataScope(reqVO.getRoleId(), reqVO.getDataScope(), reqVO.getDataScopeDeptIds());
  53 + return success(true);
  54 + }
  55 +
46 56 // @GetMapping("/list-admin-roles")
47 57 // @ApiOperation("获得管理员拥有的角色编号列表")
48 58 //// @RequiresPermissions("system:permission:assign-admin-role")
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.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 SysPermissionAssignRoleDataScopeReqVO {
  14 +
  15 + @ApiModelProperty(value = "角色编号", required = true, example = "1")
  16 + @NotNull(message = "角色编号不能为空")
  17 + private Long roleId;
  18 +
  19 + @ApiModelProperty(value = "数据范围", required = true, example = "1", notes = "参见 SysDataScopeEnum 枚举类")
  20 + @NotNull(message = "数据范围不能为空")
  21 +// TODO 这里要多一个枚举校验
  22 + private Integer dataScope;
  23 +
  24 + @ApiModelProperty(value = "部门编号列表", example = "1,3,5", notes = "只有范围类型为 DEPT_CUSTOM 时,该字段才需要")
  25 + private Set<Long> dataScopeDeptIds = Collections.emptySet(); // 兜底
  26 +
  27 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java
... ... @@ -12,7 +12,7 @@ import java.util.Set;
12 12 @Data
13 13 public class SysPermissionAssignRoleMenuReqVO {
14 14  
15   - @ApiModelProperty(value = "角色名", required = true, example = "1")
  15 + @ApiModelProperty(value = "角色编号", required = true, example = "1")
16 16 @NotNull(message = "角色编号不能为空")
17 17 private Long roleId;
18 18  
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRolePageReqVO.java
... ... @@ -5,6 +5,11 @@ import io.swagger.annotations.ApiModel;
5 5 import io.swagger.annotations.ApiModelProperty;
6 6 import lombok.Data;
7 7 import lombok.EqualsAndHashCode;
  8 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.util.Date;
  11 +
  12 +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
8 13  
9 14 @ApiModel("角色分页 Request VO")
10 15 @Data
... ... @@ -14,7 +19,18 @@ public class SysRolePageReqVO extends PageParam {
14 19 @ApiModelProperty(value = "角色名称", example = "芋道", notes = "模糊匹配")
15 20 private String name;
16 21  
  22 + @ApiModelProperty(value = "角色标识", example = "yudao", notes = "模糊匹配")
  23 + private String code;
  24 +
17 25 @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类")
18 26 private Integer status;
19 27  
  28 + @ApiModelProperty(value = "开始时间", example = "2020-10-24")
  29 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  30 + private Date beginTime;
  31 +
  32 + @ApiModelProperty(value = "结束时间", example = "2020-10-24")
  33 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  34 + private Date endTime;
  35 +
20 36 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRoleRespVO.java
... ... @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
8 8 import lombok.NoArgsConstructor;
9 9  
10 10 import java.util.Date;
  11 +import java.util.Set;
11 12  
12 13 @ApiModel("角色信息 Response VO")
13 14 @Data
... ... @@ -22,6 +23,9 @@ public class SysRoleRespVO extends SysRoleBaseVO {
22 23 @ApiModelProperty(value = "数据范围", required = true, example = "1", notes = "参见 DataScopeEnum 枚举类")
23 24 private Integer dataScope;
24 25  
  26 + @ApiModelProperty(value = "数据范围(指定部门数组)", example = "1")
  27 + private Set<Long> dataScopeDeptIds;
  28 +
25 29 @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类")
26 30 private Integer status;
27 31  
... ...
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/permission/SysRoleMapper.java
... ... @@ -14,7 +14,9 @@ public interface SysRoleMapper extends BaseMapper&lt;SysRoleDO&gt; {
14 14 default IPage<SysRoleDO> selectPage(SysRolePageReqVO reqVO) {
15 15 return selectPage(MyBatisUtils.buildPage(reqVO),
16 16 new QueryWrapperX<SysRoleDO>().likeIfPresent("name", reqVO.getName())
17   - .eqIfPresent("status", reqVO.getStatus()));
  17 + .likeIfPresent("code", reqVO.getCode())
  18 + .eqIfPresent("status", reqVO.getStatus())
  19 + .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()));
18 20 }
19 21  
20 22 default SysRoleDO selectByName(String name) {
... ...
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/permission/SysRoleDO.java
... ... @@ -12,7 +12,7 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
12 12 import lombok.Data;
13 13 import lombok.EqualsAndHashCode;
14 14  
15   -import java.util.List;
  15 +import java.util.Set;
16 16  
17 17 /**
18 18 * 角色 DO
... ... @@ -72,6 +72,6 @@ public class SysRoleDO extends BaseDO {
72 72 * 适用于 {@link #dataScope} 的值为 {@link DataScopeEnum#DEPT_CUSTOM} 时
73 73 */
74 74 @TableField(typeHandler = FastjsonTypeHandler.class)
75   - private List<Long> dataScopeDeptIds;
  75 + private Set<Long> dataScopeDeptIds;
76 76  
77 77 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
... ... @@ -30,7 +30,6 @@ public interface SysErrorCodeConstants {
30 30 ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1002003000, "角色不存在");
31 31 ErrorCode ROLE_NAME_DUPLICATE = new ErrorCode(1002003001, "已经存在名为【{}}】的角色");
32 32 ErrorCode ROLE_CODE_DUPLICATE = new ErrorCode(1002003002, "已经存在编码为【{}}】的角色");
33   - ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1002003004, "不能修改类型为系统内置的角色");
34   - ErrorCode ROLE_CAN_NOT_DELETE_SYSTEM_TYPE_ROLE = new ErrorCode(1002003005, "不能删除类型为系统内置的角色");
  33 + ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1002003004, "不能操作类型为系统内置的角色");
35 34  
36 35 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysPermissionService.java
... ... @@ -52,7 +52,7 @@ public interface SysPermissionService {
52 52 Set<Long> listRoleMenuIds(Long roleId);
53 53  
54 54 /**
55   - * 赋予赋予角色菜单
  55 + * 设置角色菜单
56 56 *
57 57 * @param roleId 角色编号
58 58 * @param menuIds 菜单编号集合
... ... @@ -60,6 +60,15 @@ public interface SysPermissionService {
60 60 void assignRoleMenu(Long roleId, Set<Long> menuIds);
61 61  
62 62 /**
  63 + * 设置角色的数据权限
  64 + *
  65 + * @param roleId 角色编号
  66 + * @param dataScope 数据范围
  67 + * @param dataScopeDeptIds 部门编号数组
  68 + */
  69 + void assignRoleDataScope(Long roleId, Integer dataScope, Set<Long> dataScopeDeptIds);
  70 +
  71 + /**
63 72 * 处理角色删除时,删除关联授权角色
64 73 *
65 74 * @param roleId 角色编号
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysRoleService.java
... ... @@ -8,6 +8,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRo
8 8  
9 9 import java.util.Collection;
10 10 import java.util.List;
  11 +import java.util.Set;
11 12  
12 13 /**
13 14 * 角色 Service 接口
... ... @@ -91,4 +92,13 @@ public interface SysRoleService {
91 92 */
92 93 void updateRoleStatus(Long id, Integer status);
93 94  
  95 + /**
  96 + * 设置角色的数据权限
  97 + *
  98 + * @param id 角色编号
  99 + * @param dataScope 数据范围
  100 + * @param dataScopeDeptIds 部门编号数组
  101 + */
  102 + void updateRoleDataScope(Long id, Integer dataScope, Set<Long> dataScopeDeptIds);
  103 +
94 104 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
... ... @@ -143,6 +143,11 @@ public class SysPermissionServiceImpl implements SysPermissionService {
143 143 }
144 144  
145 145 @Override
  146 + public void assignRoleDataScope(Long roleId, Integer dataScope, Set<Long> dataScopeDeptIds) {
  147 + roleService.updateRoleDataScope(roleId, dataScope, dataScopeDeptIds);
  148 + }
  149 +
  150 + @Override
146 151 public void processRoleDeleted(Long roleId) {
147 152 // TODO 实现我
148 153 // // 标记删除 RoleResource
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
... ... @@ -23,10 +23,7 @@ import org.springframework.util.StringUtils;
23 23  
24 24 import javax.annotation.PostConstruct;
25 25 import javax.annotation.Resource;
26   -import java.util.Collection;
27   -import java.util.Collections;
28   -import java.util.List;
29   -import java.util.Map;
  26 +import java.util.*;
30 27 import java.util.stream.Collectors;
31 28  
32 29 import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
... ... @@ -148,6 +145,18 @@ public class SysRoleServiceImpl implements SysRoleService {
148 145 roleMapper.updateById(updateObject);
149 146 }
150 147  
  148 + @Override
  149 + public void updateRoleDataScope(Long id, Integer dataScope, Set<Long> dataScopeDeptIds) {
  150 + // 校验是否可以更新
  151 + checkUpdateRole(id);
  152 + // 更新数据范围
  153 + SysRoleDO updateObject = new SysRoleDO();
  154 + updateObject.setId(id);
  155 + updateObject.setDataScope(dataScope);
  156 + updateObject.setDataScopeDeptIds(dataScopeDeptIds);
  157 + roleMapper.updateById(updateObject);
  158 + }
  159 +
151 160 /**
152 161 * 校验角色的唯一字段是否重复
153 162 *
... ... @@ -187,7 +196,7 @@ public class SysRoleServiceImpl implements SysRoleService {
187 196 }
188 197 // 内置角色,不允许删除
189 198 if (RoleTypeEnum.SYSTEM.getType().equals(roleDO.getType())) {
190   - throw ServiceExceptionUtil.exception(ROLE_CAN_NOT_DELETE_SYSTEM_TYPE_ROLE);
  199 + throw ServiceExceptionUtil.exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE);
191 200 }
192 201 }
193 202  
... ...
src/main/java/cn/iocoder/dashboard/util/date/DateUtils.java
... ... @@ -8,6 +8,8 @@ import java.util.Date;
8 8 */
9 9 public class DateUtils {
10 10  
  11 + public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
  12 +
11 13 public static Date addTime(Duration duration) {
12 14 return new Date(System.currentTimeMillis() + duration.toMillis());
13 15 }
... ...