From a36dc6635f92b1a6a5ea43c801f028dea08a7f0b Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期日, 21 八月 2022 22:44:46 +0800 Subject: [PATCH] 优化多角色数据权限匹配规则 --- src/main/resources/mybatis/system/SysMenuMapper.xml | 47 ++++++++++++++++++++++++++++++++--------------- 1 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/main/resources/mybatis/system/SysMenuMapper.xml b/src/main/resources/mybatis/system/SysMenuMapper.xml index ac3a9c5..5c4fca7 100644 --- a/src/main/resources/mybatis/system/SysMenuMapper.xml +++ b/src/main/resources/mybatis/system/SysMenuMapper.xml @@ -12,7 +12,9 @@ <result property="orderNum" column="order_num" /> <result property="path" column="path" /> <result property="component" column="component" /> + <result property="query" column="query" /> <result property="isFrame" column="is_frame" /> + <result property="isCache" column="is_cache" /> <result property="menuType" column="menu_type" /> <result property="visible" column="visible" /> <result property="status" column="status" /> @@ -26,7 +28,7 @@ </resultMap> <sql id="selectMenuVo"> - select menu_id, menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time from sys_menu </sql> @@ -47,32 +49,32 @@ </select> <select id="selectMenuTreeAll" resultMap="SysMenuResult"> - 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.menu_type, m.icon, m.order_num, m.create_time + select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, 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 from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num </select> <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult"> - 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.menu_type, m.icon, m.order_num, m.create_time + select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, 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 from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id where ur.user_id = #{params.userId} <if test="menuName != null and menuName != ''"> - AND menu_name like concat('%', #{menuName}, '%') + AND m.menu_name like concat('%', #{menuName}, '%') </if> <if test="visible != null and visible != ''"> - AND visible = #{visible} + AND m.visible = #{visible} </if> <if test="status != null and status != ''"> - AND status = #{status} + AND m.status = #{status} </if> order by m.parent_id, m.order_num </select> <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult"> - 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.menu_type, m.icon, m.order_num, m.create_time + select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, 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 from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id @@ -82,12 +84,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="Long"> + 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> @@ -107,6 +111,13 @@ where m.status = '0' and r.status = '0' and ur.user_id = #{userId} </select> + <select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String"> + select distinct m.perms + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id + where m.status = '0' and rm.role_id = #{roleId} + </select> + <select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult"> <include refid="selectMenuVo"/> where menu_id = #{menuId} @@ -118,7 +129,7 @@ <select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult"> <include refid="selectMenuVo"/> - where menu_name=#{menuName} and parent_id = #{parentId} + where menu_name=#{menuName} and parent_id = #{parentId} limit 1 </select> <update id="updateMenu" parameterType="SysMenu"> @@ -126,10 +137,12 @@ <set> <if test="menuName != null and menuName != ''">menu_name = #{menuName},</if> <if test="parentId != null">parent_id = #{parentId},</if> - <if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if> + <if test="orderNum != null">order_num = #{orderNum},</if> <if test="path != null and path != ''">path = #{path},</if> - <if test="component != null and component != ''">component = #{component},</if> + <if test="component != null">component = #{component},</if> + <if test="query != null">`query` = #{query},</if> <if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if> + <if test="isCache != null and isCache != ''">is_cache = #{isCache},</if> <if test="menuType != null and menuType != ''">menu_type = #{menuType},</if> <if test="visible != null">visible = #{visible},</if> <if test="status != null">status = #{status},</if> @@ -147,10 +160,12 @@ <if test="menuId != null and menuId != 0">menu_id,</if> <if test="parentId != null and parentId != 0">parent_id,</if> <if test="menuName != null and menuName != ''">menu_name,</if> - <if test="orderNum != null and orderNum != ''">order_num,</if> + <if test="orderNum != null">order_num,</if> <if test="path != null and path != ''">path,</if> <if test="component != null and component != ''">component,</if> + <if test="query != null and query != ''">`query`,</if> <if test="isFrame != null and isFrame != ''">is_frame,</if> + <if test="isCache != null and isCache != ''">is_cache,</if> <if test="menuType != null and menuType != ''">menu_type,</if> <if test="visible != null">visible,</if> <if test="status != null">status,</if> @@ -163,10 +178,12 @@ <if test="menuId != null and menuId != 0">#{menuId},</if> <if test="parentId != null and parentId != 0">#{parentId},</if> <if test="menuName != null and menuName != ''">#{menuName},</if> - <if test="orderNum != null and orderNum != ''">#{orderNum},</if> + <if test="orderNum != null">#{orderNum},</if> <if test="path != null and path != ''">#{path},</if> <if test="component != null and component != ''">#{component},</if> + <if test="query != null and query != ''">#{query},</if> <if test="isFrame != null and isFrame != ''">#{isFrame},</if> + <if test="isCache != null and isCache != ''">#{isCache},</if> <if test="menuType != null and menuType != ''">#{menuType},</if> <if test="visible != null">#{visible},</if> <if test="status != null">#{status},</if> -- Gitblit v1.9.3