概述
服务端菜单接口设计
- 通过id来获取菜单
通过id来获取菜单
控制层
由于前端数据不可信所以不能从前端取用户id
package com.akk.vhr.controller;
import com.akk.vhr.model.Menu;
import com.akk.vhr.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/system/config")
public class SystemConfigController {
// 前端数据是不可信的
@Autowired
MenuService MenuService;
@GetMapping("/menu")
public List<Menu> getMenusByHrId(){
return MenuService.getMenusByHrId();
}
}
服务层
登录后用户信息会保存到内存中 使用SecurityContextHolder中取出登录id
@Service
public class MenuService {
@Autowired
MenuMapper menuMapper;
public List<Menu> getMenusByHrId() {
// 由于前端数据不可信,登录后用户信息会保存到内存中 使用SecurityContextHolder中取出登录id
return menuMapper.getMenusByHrId(((Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
}
}
sql
将sql结果拼成路由的格式,返回前端就可以直接遍历使用
<resultMap id="Menus2" type="com.akk.vhr.model.Menu" extends="BaseResultMap">
<collection property="children" ofType="com.akk.vhr.model.Menu">
<id column="id2" property="id" jdbcType="INTEGER" />
<result column="url2" property="url" jdbcType="VARCHAR" />
<result column="path2" property="path" jdbcType="VARCHAR" />
<result column="component2" property="component" jdbcType="VARCHAR" />
<result column="name2" property="name" jdbcType="VARCHAR" />
<result column="iconCls2" property="iconCls" jdbcType="VARCHAR" />
<result column="parentId2" property="parentId" jdbcType="INTEGER" />
<result column="enabled2" property="enabled" jdbcType="BIT" />
<association property="meta" javaType="com.akk.vhr.model.Meta">
<result column="keepAlive2" property="keepAlive" jdbcType="BIT" />
<result column="requireAuth2" property="requireAuth" jdbcType="BIT" />
</association>
</collection>
</resultMap>
<select id="getMenusByHrId" resultMap="Menus2">
SELECT
DISTINCT
m1.*,
m2.id AS id2,
m2.component AS component2,
m2.enabled AS enabled2,
m2.iconCls AS iconCls2,
m2.keepAlive AS keepAlive2,
m2.name AS name2,
m2.parentId AS parentId2,
m2.requireAuth AS requireAuth2,
m2.path AS path2
FROM
menu m1,
menu m2,
hr_role hrr,
menu_role mr
WHERE m1.id = m2.parentId
AND hrr.hrid=11
AND hrr.rid = mr.rid
AND mr.mid=m2.id
AND m2.enabled = TRUE
ORDER BY m1.id,m2.id
</select>
最后得到
两个一级菜单
第一个
两个二级菜单
第二个
五个二级菜单
最后
以上就是专注蜜粉为你收集整理的微人事-服务端菜单接口设计的全部内容,希望文章能够帮你解决微人事-服务端菜单接口设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复