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(""); } }