zhanghua
2022-10-28 3eb801e80941304a3174d1b90a8d161b41eb3d67
动态菜单权限
6个文件已修改
154 ■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/entity/user/UmsMenu.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/UmsMenuService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/UmsRoleService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/impl/UmsRoleServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/resources/mapper/user/UmsMenuMapper.xml 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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);
}
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 @@
    /**
     * 根据管理员ID获取对应菜单
     */
    List<UmsMenu> getMenuList(Long adminId);
    List<UmsMenuNode> getMenuList(Long adminId);
    /**
     * 获取角色相关菜单
ycl-common/src/main/java/com/ycl/service/user/impl/UmsMenuServiceImpl.java
@@ -129,7 +129,8 @@
    /**
     * 将UmsMenu转化为UmsMenuNode并设置children属性
     */
    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()
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);
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>