From a56704036837f6064417744a690acc2984df0a76 Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期六, 19 九月 2020 13:26:02 +0800 Subject: [PATCH] 菜单&数据权限新增(展开/折叠 全选/全不选 父子联动) --- src/main/java/com/ruoyi/project/system/domain/SysRole.java | 26 ++++++++ src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java | 3 src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java | 8 ++ src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java | 8 ++ sql/ry_20200919.sql | 30 +++++---- src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java | 3 src/main/resources/mybatis/system/SysMenuMapper.xml | 8 +- src/main/resources/mybatis/system/SysRoleMapper.xml | 34 +++++++---- src/main/resources/mybatis/system/SysDeptMapper.xml | 8 +- 9 files changed, 91 insertions(+), 37 deletions(-) diff --git a/sql/ry_20200901.sql b/sql/ry_20200919.sql similarity index 96% rename from sql/ry_20200901.sql rename to sql/ry_20200919.sql index 3a9be71..5dc972e 100644 --- a/sql/ry_20200901.sql +++ b/sql/ry_20200919.sql @@ -102,26 +102,28 @@ -- ---------------------------- drop table if exists sys_role; create table sys_role ( - role_id bigint(20) not null auto_increment comment '瑙掕壊ID', - role_name varchar(30) not null comment '瑙掕壊鍚嶇О', - role_key varchar(100) not null comment '瑙掕壊鏉冮檺瀛楃涓�', - role_sort int(4) not null comment '鏄剧ず椤哄簭', - data_scope char(1) default '1' comment '鏁版嵁鑼冨洿锛�1锛氬叏閮ㄦ暟鎹潈闄� 2锛氳嚜瀹氭暟鎹潈闄� 3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶級', - status char(1) not null comment '瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�', - del_flag char(1) default '0' comment '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�', - create_by varchar(64) default '' comment '鍒涘缓鑰�', - create_time datetime comment '鍒涘缓鏃堕棿', - update_by varchar(64) default '' comment '鏇存柊鑰�', - update_time datetime comment '鏇存柊鏃堕棿', - remark varchar(500) default null comment '澶囨敞', + role_id bigint(20) not null auto_increment comment '瑙掕壊ID', + role_name varchar(30) not null comment '瑙掕壊鍚嶇О', + role_key varchar(100) not null comment '瑙掕壊鏉冮檺瀛楃涓�', + role_sort int(4) not null comment '鏄剧ず椤哄簭', + data_scope char(1) default '1' comment '鏁版嵁鑼冨洿锛�1锛氬叏閮ㄦ暟鎹潈闄� 2锛氳嚜瀹氭暟鎹潈闄� 3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶級', + menu_check_strictly tinyint(1) default 1 comment '鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�', + dept_check_strictly tinyint(1) default 1 comment '閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�', + status char(1) not null comment '瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�', + del_flag char(1) default '0' comment '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�', + create_by varchar(64) default '' comment '鍒涘缓鑰�', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰�', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', primary key (role_id) ) engine=innodb auto_increment=100 comment = '瑙掕壊淇℃伅琛�'; -- ---------------------------- -- 鍒濆鍖�-瑙掕壊淇℃伅琛ㄦ暟鎹� -- ---------------------------- -insert into sys_role values('1', '瓒呯骇绠$悊鍛�', 'admin', 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '瓒呯骇绠$悊鍛�'); -insert into sys_role values('2', '鏅�氳鑹�', 'common', 2, 2, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '鏅�氳鑹�'); +insert into sys_role values('1', '瓒呯骇绠$悊鍛�', 'admin', 1, 1, 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '瓒呯骇绠$悊鍛�'); +insert into sys_role values('2', '鏅�氳鑹�', 'common', 2, 2, 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '鏅�氳鑹�'); -- ---------------------------- diff --git a/src/main/java/com/ruoyi/project/system/domain/SysRole.java b/src/main/java/com/ruoyi/project/system/domain/SysRole.java index 677c2e4..3c0407a 100644 --- a/src/main/java/com/ruoyi/project/system/domain/SysRole.java +++ b/src/main/java/com/ruoyi/project/system/domain/SysRole.java @@ -37,6 +37,12 @@ @Excel(name = "鏁版嵁鑼冨洿", readConverterExp = "1=鎵�鏈夋暟鎹潈闄�,2=鑷畾涔夋暟鎹潈闄�,3=鏈儴闂ㄦ暟鎹潈闄�,4=鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺") private String dataScope; + /** 鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙0锛氱埗瀛愪簰鐩稿叧鑱旀樉绀� 1锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず锛� */ + private boolean menuCheckStrictly; + + /** 閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙0锛氱埗瀛愪簰鐩稿叧鑱旀樉绀� 1锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず锛� */ + private boolean deptCheckStrictly; + /** 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛� */ @Excel(name = "瑙掕壊鐘舵��", readConverterExp = "0=姝e父,1=鍋滅敤") private String status; @@ -128,6 +134,26 @@ this.dataScope = dataScope; } + public boolean isMenuCheckStrictly() + { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly(boolean menuCheckStrictly) + { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly() + { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly(boolean deptCheckStrictly) + { + this.deptCheckStrictly = deptCheckStrictly; + } + public String getStatus() { return status; diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java index 113db29..b16a7fa 100644 --- a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java +++ b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java @@ -23,9 +23,10 @@ * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭� * * @param roleId 瑙掕壊ID + * @param deptCheckStrictly 閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀� * @return 閫変腑閮ㄩ棬鍒楄〃 */ - public List<Integer> selectDeptListByRoleId(Long roleId); + public List<Integer> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); /** * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java index fc46085..3d3c8ac 100644 --- a/src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java +++ b/src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java @@ -61,9 +61,10 @@ * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭� * * @param roleId 瑙掕壊ID + * @param menuCheckStrictly 鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀� * @return 閫変腑鑿滃崟鍒楄〃 */ - public List<Integer> selectMenuListByRoleId(Long roleId); + public List<Integer> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); /** * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java index 6acea9e..6dee354 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java @@ -12,7 +12,9 @@ import com.ruoyi.framework.aspectj.lang.annotation.DataScope; import com.ruoyi.framework.web.domain.TreeSelect; import com.ruoyi.project.system.domain.SysDept; +import com.ruoyi.project.system.domain.SysRole; import com.ruoyi.project.system.mapper.SysDeptMapper; +import com.ruoyi.project.system.mapper.SysRoleMapper; import com.ruoyi.project.system.service.ISysDeptService; /** @@ -25,6 +27,9 @@ { @Autowired private SysDeptMapper deptMapper; + + @Autowired + private SysRoleMapper roleMapper; /** * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 @@ -93,7 +98,8 @@ @Override public List<Integer> selectDeptListByRoleId(Long roleId) { - return deptMapper.selectDeptListByRoleId(roleId); + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); } /** diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java index fb1c830..b473b44 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java @@ -15,10 +15,12 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.domain.TreeSelect; import com.ruoyi.project.system.domain.SysMenu; +import com.ruoyi.project.system.domain.SysRole; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.domain.vo.MetaVo; import com.ruoyi.project.system.domain.vo.RouterVo; import com.ruoyi.project.system.mapper.SysMenuMapper; +import com.ruoyi.project.system.mapper.SysRoleMapper; import com.ruoyi.project.system.mapper.SysRoleMenuMapper; import com.ruoyi.project.system.service.ISysMenuService; @@ -34,6 +36,9 @@ @Autowired private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; @Autowired private SysRoleMenuMapper roleMenuMapper; @@ -124,7 +129,8 @@ @Override public List<Integer> selectMenuListByRoleId(Long roleId) { - return menuMapper.selectMenuListByRoleId(roleId); + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); } /** diff --git a/src/main/resources/mybatis/system/SysDeptMapper.xml b/src/main/resources/mybatis/system/SysDeptMapper.xml index 28f5afe..18f52a0 100644 --- a/src/main/resources/mybatis/system/SysDeptMapper.xml +++ b/src/main/resources/mybatis/system/SysDeptMapper.xml @@ -44,12 +44,14 @@ order by d.parent_id, d.order_num </select> - <select id="selectDeptListByRoleId" parameterType="Long" resultType="Integer"> - select d.dept_id, d.parent_id + <select id="selectDeptListByRoleId" resultType="Integer"> + select d.dept_id from sys_dept d left join sys_role_dept rd on d.dept_id = rd.dept_id where rd.role_id = #{roleId} - and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId}) + <if test="deptCheckStrictly"> + and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId}) + </if> order by d.parent_id, d.order_num </select> diff --git a/src/main/resources/mybatis/system/SysMenuMapper.xml b/src/main/resources/mybatis/system/SysMenuMapper.xml index 72522f8..e37f063 100644 --- a/src/main/resources/mybatis/system/SysMenuMapper.xml +++ b/src/main/resources/mybatis/system/SysMenuMapper.xml @@ -82,12 +82,14 @@ order by m.parent_id, m.order_num </select> - <select id="selectMenuListByRoleId" parameterType="Long" resultType="Integer"> - select m.menu_id, m.parent_id + <select id="selectMenuListByRoleId" resultType="Integer"> + select m.menu_id from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where rm.role_id = #{roleId} - and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId}) + <if test="menuCheckStrictly"> + and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId}) + </if> order by m.parent_id, m.order_num </select> diff --git a/src/main/resources/mybatis/system/SysRoleMapper.xml b/src/main/resources/mybatis/system/SysRoleMapper.xml index fc9d42e..f99d881 100644 --- a/src/main/resources/mybatis/system/SysRoleMapper.xml +++ b/src/main/resources/mybatis/system/SysRoleMapper.xml @@ -5,22 +5,24 @@ <mapper namespace="com.ruoyi.project.system.mapper.SysRoleMapper"> <resultMap type="SysRole" id="SysRoleResult"> - <id property="roleId" column="role_id" /> - <result property="roleName" column="role_name" /> - <result property="roleKey" column="role_key" /> - <result property="roleSort" column="role_sort" /> - <result property="dataScope" column="data_scope" /> - <result property="status" column="status" /> - <result property="delFlag" column="del_flag" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - <result property="remark" column="remark" /> + <id property="roleId" column="role_id" /> + <result property="roleName" column="role_name" /> + <result property="roleKey" column="role_key" /> + <result property="roleSort" column="role_sort" /> + <result property="dataScope" column="data_scope" /> + <result property="menuCheckStrictly" column="menu_check_strictly" /> + <result property="deptCheckStrictly" column="dept_check_strictly" /> + <result property="status" column="status" /> + <result property="delFlag" column="del_flag" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + <result property="remark" column="remark" /> </resultMap> <sql id="selectRoleVo"> - select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, + select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id @@ -95,6 +97,8 @@ <if test="roleKey != null and roleKey != ''">role_key,</if> <if test="roleSort != null and roleSort != ''">role_sort,</if> <if test="dataScope != null and dataScope != ''">data_scope,</if> + <if test="menuCheckStrictly != null and menuCheckStrictly != ''">menu_check_strictly,</if> + <if test="deptCheckStrictly != null and deptCheckStrictly != ''">dept_check_strictly,</if> <if test="status != null and status != ''">status,</if> <if test="remark != null and remark != ''">remark,</if> <if test="createBy != null and createBy != ''">create_by,</if> @@ -105,6 +109,8 @@ <if test="roleKey != null and roleKey != ''">#{roleKey},</if> <if test="roleSort != null and roleSort != ''">#{roleSort},</if> <if test="dataScope != null and dataScope != ''">#{dataScope},</if> + <if test="menuCheckStrictly != null">#{menu_check_strictly},</if> + <if test="deptCheckStrictly != null">#{dept_check_strictly},</if> <if test="status != null and status != ''">#{status},</if> <if test="remark != null and remark != ''">#{remark},</if> <if test="createBy != null and createBy != ''">#{createBy},</if> @@ -119,6 +125,8 @@ <if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if> <if test="roleSort != null and roleSort != ''">role_sort = #{roleSort},</if> <if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if> + <if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if> + <if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if> <if test="status != null and status != ''">status = #{status},</if> <if test="remark != null">remark = #{remark},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> -- Gitblit v1.9.3