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