微人事-服务端菜单接口设计

服务端菜单接口设计

通过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>

最后得到
两个一级菜单
在这里插入图片描述
第一个
两个二级菜单
在这里插入图片描述
第二个
五个二级菜单
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值