7.1 根据用户id查询菜单列表

7.1 根据用户id查询菜单列表

提示:仅作为个人学习笔记



前言


一、菜单列表功能点

  • 菜单涉及权限,不同权限用户显示菜单列表不同
  • 用户id从SecurityContextHolder中取(等了解spring-security后修改)
  • 多级菜单列,父子级关系
  • 涉及多表查询

二、实现

1.sql

代码如下(示例):

select 
DISTINCT
m1.*,
m2.id as id2,
m2.url as url2,
m2.path as path2,
m2.component as component2,
m2.`name` as `name2`,
m2.iconCls as iconCls2,
m2.keepAlive as keepAlive2,
m2.requireAuth as requireAuth2,
m2.parentId as parentId2,
m2.enabled as enabled2
FROM
t_menu as m1,
t_menu as m2,
t_admin_role as ar,
t_menu_role as mr
where 
m1.id = m2.parentId
and  m2.id = mr.mid
and mr.rid = ar.rid
and ar.adminId = 3
AND m2.enabled = TRUE;

2.各层实现

2.1 controller

因用户id的获取不需要从前台单独传入,后端从安全对象中获取即可

@RestController
@RequestMapping("/system/cfg")
public class MenuController {
    @Autowired
    private IMenuService iMenuService;

    @ApiOperation(value = "通过用户id查询菜单列表")
    @GetMapping("/menu")
    public List<Menu> getMenusByAdminId(){
        return iMenuService.getMenusByAdminId();
    }
}

2.2 service

@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
    @Autowired
    private MenuMapper menuMapper;

    @Override
    public List<Menu> getMenusByAdminId() {
        return menuMapper.getMenusByAdminId(((Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
    }
}

2.3 mapper

List<Menu> getMenusByAdminId(Integer id);

sql xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youzi.server.mapper.MenuMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.youzi.server.pojo.Menu">
        <id column="id" property="id" />
        <result column="url" property="url" />
        <result column="path" property="path" />
        <result column="component" property="component" />
        <result column="name" property="name" />
        <result column="iconCls" property="iconCls" />
        <result column="keepAlive" property="keepAlive" />
        <result column="requireAuth" property="requireAuth" />
        <result column="parentId" property="parentId" />
        <result column="enabled" property="enabled" />
    </resultMap>

    <resultMap id="Menus" type="com.youzi.server.pojo.Menu" extends="BaseResultMap">
        <collection property="children" ofType="com.youzi.server.pojo.Menu">
            <id column="id2" property="id" />
            <result column="url2" property="url" />
            <result column="path2" property="path" />
            <result column="component2" property="component" />
            <result column="name2" property="name" />
            <result column="iconCls2" property="iconCls" />
            <result column="keepAlive2" property="keepAlive" />
            <result column="requireAuth2" property="requireAuth" />
            <result column="parentId2" property="parentId" />
            <result column="enabled2" property="enabled" />
        </collection>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, url, path, component, name, iconCls, keepAlive, requireAuth, parentId, enabled
    </sql>

    <select id="getMenusByAdminId" resultMap="Menus">
        select
            DISTINCT
            m1.*,
            m2.id as id2,
            m2.url as url2,
            m2.path as path2,
            m2.component as component2,
            m2.`name` as `name2`,
            m2.iconCls as iconCls2,
            m2.keepAlive as keepAlive2,
            m2.requireAuth as requireAuth2,
            m2.parentId as parentId2,
            m2.enabled as enabled2
            FROM
            t_menu as m1,
            t_menu as m2,
            t_admin_role as ar,
            t_menu_role as mr

            where

            m1.id = m2.parentId
            and  m2.id = mr.mid
            and mr.rid = ar.rid
            and ar.adminId = #{id}
            AND m2.enabled = TRUE;
    </select>

</mapper>

三、测试

提示:要先登录
在这里插入图片描述

总结

需要学习spring security 与jwt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽淼淼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值