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