package com.mes.menu.controller;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mes.base.BaseController;
import com.mes.menu.entity.SysMenu;
import com.mes.menu.service.SysMenuService;
import com.mes.role.entity.SysRoleMenu;
import com.mes.userinfo.entity.SysUser;
import com.mes.utils.Result;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
/**
*
* 菜单表
*
*
* @author zhoush
* @since 2024-04-11
*/
@ApiModel("获取菜单信息")
@RestController
@RequestMapping("/menu/sysMenu")
public class SysMenuController extends BaseController {
@Autowired
SysMenuService sysMenuService;
@ApiOperation("获取用户有权限的所有菜单")
@GetMapping("/list")
public Result> getMenuTree(String userName) {
return Result.success(sysMenuService.getMenuTree());
}
@ApiOperation("获取用户的权限")
@GetMapping("/getAuthorityInfo")
public Result> getAuthorityInfo(String userName) {
return Result.success(sysMenuService.getAuthorityInfo(userName));
}
/**
* 用户当前用户的菜单和权限信息
*
* @param userName
* @return
*/
@GetMapping("/nav")
public Result nav(String userName) {
SysUser sysUser = sysUserService.getByUsername(userName);
// 获取权限信息
String authorityInfo = sysUserService.getUserAuthorityInfo(sysUser.getId());// ROLE_admin,ROLE_normal,sys:user:list,....
String[] authorityInfoArray = StringUtils.tokenizeToStringArray(authorityInfo, ",");
// 获取导航栏信息
List navs = sysMenuService.getCurrentUserNav();
return Result.success(MapUtil.builder()
.put("authoritys", authorityInfoArray)
.put("nav", navs)
.map()
);
}
@GetMapping("/info/{id}")
@PreAuthorize("hasAuthority('sys:menu:list')")
public Result info(@PathVariable(name = "id") Long id) {
return Result.success(sysMenuService.getById(id));
}
@GetMapping("/list")
@PreAuthorize("hasAuthority('sys:menu:list')")
public Result list() {
List menus = sysMenuService.tree();
return Result.success(menus);
}
@PostMapping("/save")
@PreAuthorize("hasAuthority('sys:menu:save')")
public Result save(@Validated @RequestBody SysMenu sysMenu) {
sysMenu.setCreated(LocalDateTime.now());
sysMenuService.save(sysMenu);
return Result.success(sysMenu);
}
@PostMapping("/update")
@PreAuthorize("hasAuthority('sys:menu:update')")
public Result update(@Validated @RequestBody SysMenu sysMenu) {
sysMenu.setUpdated(LocalDateTime.now());
sysMenuService.updateById(sysMenu);
// 清除所有与该菜单相关的权限缓存
sysUserService.clearUserAuthorityInfoByMenuId(sysMenu.getId());
return Result.success(sysMenu);
}
@PostMapping("/delete/{id}")
@PreAuthorize("hasAuthority('sys:menu:delete')")
public Result delete(@PathVariable("id") Long id) {
int count = sysMenuService.count(new QueryWrapper().eq("parent_id", id));
if (count > 0) {
return Result.fail("请先删除子菜单");
}
// 清除所有与该菜单相关的权限缓存
sysUserService.clearUserAuthorityInfoByMenuId(id);
sysMenuService.removeById(id);
// 同步删除中间关联表
sysRoleMenuService.remove(new QueryWrapper().eq("menu_id", id));
return Result.success("");
}
}