From 3eb801e80941304a3174d1b90a8d161b41eb3d67 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期五, 28 十月 2022 15:08:04 +0800 Subject: [PATCH] 动态菜单权限 --- ycl-common/src/main/java/com/ycl/service/user/UmsRoleService.java | 3 ycl-common/src/main/java/com/ycl/service/user/impl/UmsRoleServiceImpl.java | 23 +++++-- ycl-common/src/main/resources/mapper/user/UmsMenuMapper.xml | 116 +++++++++++++++++--------------------- ycl-common/src/main/java/com/ycl/entity/user/UmsMenu.java | 7 + ycl-common/src/main/java/com/ycl/service/user/UmsMenuService.java | 2 ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java | 3 6 files changed, 81 insertions(+), 73 deletions(-) diff --git a/ycl-common/src/main/java/com/ycl/entity/user/UmsMenu.java b/ycl-common/src/main/java/com/ycl/entity/user/UmsMenu.java index 7bd5278..70e9b29 100644 --- a/ycl-common/src/main/java/com/ycl/entity/user/UmsMenu.java +++ b/ycl-common/src/main/java/com/ycl/entity/user/UmsMenu.java @@ -22,10 +22,10 @@ @Data @EqualsAndHashCode(callSuper = false) @TableName("ums_menu") -@ApiModel(value="UmsMenu瀵硅薄", description="鍚庡彴鑿滃崟琛�") +@ApiModel(value = "UmsMenu瀵硅薄", description = "鍚庡彴鑿滃崟琛�") public class UmsMenu implements Serializable { - private static final long serialVersionUID=1L; + private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @@ -39,6 +39,9 @@ @ApiModelProperty(value = "鑿滃崟鍚嶇О") private String title; + @ApiModelProperty(value = "url璺敱") + private String url; + @ApiModelProperty(value = "鑿滃崟绾ф暟") private Integer level; diff --git a/ycl-common/src/main/java/com/ycl/service/user/UmsMenuService.java b/ycl-common/src/main/java/com/ycl/service/user/UmsMenuService.java index ee55ce7..3983880 100644 --- a/ycl-common/src/main/java/com/ycl/service/user/UmsMenuService.java +++ b/ycl-common/src/main/java/com/ycl/service/user/UmsMenuService.java @@ -43,4 +43,6 @@ List<UmsMenuVo> ListTreeMyself(Long id); String getPermission(Long userId); + + UmsMenuNode covertMenuNode(UmsMenu menu, List<UmsMenu> menuList); } diff --git a/ycl-common/src/main/java/com/ycl/service/user/UmsRoleService.java b/ycl-common/src/main/java/com/ycl/service/user/UmsRoleService.java index 685f7f3..02a3f4c 100644 --- a/ycl-common/src/main/java/com/ycl/service/user/UmsRoleService.java +++ b/ycl-common/src/main/java/com/ycl/service/user/UmsRoleService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.ycl.dto.UmsMenuNode; import com.ycl.entity.user.UmsMenu; import com.ycl.entity.user.UmsResource; import com.ycl.entity.user.UmsRole; @@ -32,7 +33,7 @@ /** * 鏍规嵁绠$悊鍛業D鑾峰彇瀵瑰簲鑿滃崟 */ - List<UmsMenu> getMenuList(Long adminId); + List<UmsMenuNode> getMenuList(Long adminId); /** * 鑾峰彇瑙掕壊鐩稿叧鑿滃崟 diff --git a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java index 03238c5..846b1bc 100644 --- a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java +++ b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java @@ -129,7 +129,8 @@ /** * 灏哢msMenu杞寲涓篣msMenuNode骞惰缃甤hildren灞炴�� */ - private UmsMenuNode covertMenuNode(UmsMenu menu, List<UmsMenu> menuList) { + @Override + public UmsMenuNode covertMenuNode(UmsMenu menu, List<UmsMenu> menuList) { UmsMenuNode node = new UmsMenuNode(); BeanUtils.copyProperties(menu, node); List<UmsMenuNode> children = menuList.stream() diff --git a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsRoleServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsRoleServiceImpl.java index d610315..68dde62 100644 --- a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsRoleServiceImpl.java +++ b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsRoleServiceImpl.java @@ -5,16 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ycl.dto.UmsMenuNode; import com.ycl.entity.dict.DataDictionary; import com.ycl.entity.user.*; import com.ycl.mapper.dict.DataDictionaryMapper; import com.ycl.mapper.user.UmsMenuMapper; import com.ycl.mapper.user.UmsResourceMapper; import com.ycl.mapper.user.UmsRoleMapper; -import com.ycl.service.user.UmsAdminCacheService; -import com.ycl.service.user.UmsRoleMenuRelationService; -import com.ycl.service.user.UmsRoleResourceRelationService; -import com.ycl.service.user.UmsRoleService; +import com.ycl.service.user.*; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +35,13 @@ private UmsRoleMenuRelationService roleMenuRelationService; @Autowired private UmsRoleResourceRelationService roleResourceRelationService; + + private UmsMenuService umsMenuService; + @Autowired + public void setUmsMenuService(UmsMenuService umsMenuService) { + this.umsMenuService = umsMenuService; + } + @Resource private UmsMenuMapper umsMenuMapper; @Resource @@ -83,10 +89,15 @@ } @Override - public List<UmsMenu> getMenuList(Long adminId) { - return umsMenuMapper.getMenuList(adminId); + public List<UmsMenuNode> getMenuList(Long adminId) { + List<UmsMenu> menuList = umsMenuMapper.getMenuList(adminId); + List<UmsMenuNode> result = menuList.stream() + .filter(menu -> menu.getParentId().equals(0L)) + .map(menu -> umsMenuService.covertMenuNode(menu, menuList)).collect(Collectors.toList()); + return result; } + @Override public List<UmsMenu> listMenu(Long roleId) { return umsMenuMapper.getMenuListByRoleId(roleId); diff --git a/ycl-common/src/main/resources/mapper/user/UmsMenuMapper.xml b/ycl-common/src/main/resources/mapper/user/UmsMenuMapper.xml index af61816..cccc442 100644 --- a/ycl-common/src/main/resources/mapper/user/UmsMenuMapper.xml +++ b/ycl-common/src/main/resources/mapper/user/UmsMenuMapper.xml @@ -4,79 +4,69 @@ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> <resultMap id="BaseResultMap" type="com.ycl.entity.user.UmsMenu"> - <id column="id" property="id" /> - <result column="parent_id" property="parentId" /> - <result column="create_time" property="createTime" /> - <result column="title" property="title" /> - <result column="level" property="level" /> - <result column="sort" property="sort" /> - <result column="name" property="name" /> - <result column="icon" property="icon" /> - <result column="hidden" property="hidden" /> + <id column="id" property="id"/> + <result column="parent_id" property="parentId"/> + <result column="create_time" property="createTime"/> + <result column="title" property="title"/> + <result column="level" property="level"/> + <result column="sort" property="sort"/> + <result column="name" property="name"/> + <result column="icon" property="icon"/> + <result column="hidden" property="hidden"/> </resultMap> <select id="getMenuList" resultType="com.ycl.entity.user.UmsMenu"> - SELECT - m.id id, - m.parent_id parentId, - m.create_time createTime, - m.title title, - m.level level, - m.sort sort, - m.name name, - m.icon icon, - m.hidden hidden - FROM - ums_admin_role_relation arr - LEFT JOIN ums_role r ON arr.role_id = r.id - LEFT JOIN ums_role_menu_relation rmr ON r.id = rmr.role_id - LEFT JOIN ums_menu m ON rmr.menu_id = m.id - WHERE - arr.admin_id = #{adminId} + SELECT distinct m.id, + m.parent_id parentId, + m.create_time createTime, + m.title, + m.url, + m.level, + m.sort, + m.name, + m.icon, + m.hidden + FROM ums_admin_role_relation arr + LEFT JOIN ums_role r ON arr.role_id = r.id + LEFT JOIN ums_role_menu_relation rmr ON r.id = rmr.role_id + LEFT JOIN ums_menu m ON rmr.menu_id = m.id + WHERE arr.admin_id = #{adminId} AND m.id IS NOT NULL - GROUP BY - m.id + Order BY m.`level`, m.sort </select> <select id="getMenuListByRoleId" resultType="com.ycl.entity.user.UmsMenu"> - SELECT - m.id id, - m.parent_id parentId, - m.create_time createTime, - m.title title, - m.level level, - m.sort sort, - m.name name, - m.icon icon, - m.hidden hidden - FROM - ums_role_menu_relation rmr - LEFT JOIN ums_menu m ON rmr.menu_id = m.id - WHERE - rmr.role_id = #{roleId} + SELECT m.id id, + m.parent_id parentId, + m.create_time createTime, + m.title title, + m.level level, + m.sort sort, + m.name name, + m.icon icon, + m.hidden hidden + FROM ums_role_menu_relation rmr + LEFT JOIN ums_menu m ON rmr.menu_id = m.id and m.leaf = 1 + WHERE rmr.role_id = #{roleId} AND m.id IS NOT NULL - GROUP BY - m.id + GROUP BY m.id </select> <select id="adminMenuRelation" resultType="com.ycl.entity.user.vo.UmsMenuVo"> - SELECT - amr.id AS relationId, - amr.is_start AS isStart, - amr.sort, - m.id, - m.parent_id AS parentId, - m.title, - m.url, - m.`level`, - m.description, - m.create_time as createTime, - m.hidden, - m.icon - FROM - `ums_admin_menu_relation` AS amr - JOIN ums_menu AS m ON amr.menu_id = m.id - WHERE - amr.admin_id = #{id} + SELECT amr.id AS relationId, + amr.is_start AS isStart, + amr.sort, + m.id, + m.parent_id AS parentId, + m.title, + m.url, + m.`level`, + m.description, + m.create_time as createTime, + m.hidden, + m.icon + FROM `ums_admin_menu_relation` AS amr + JOIN ums_menu AS m ON amr.menu_id = m.id + WHERE amr.admin_id = #{id} </select> </mapper> -- Gitblit v1.8.0