package com.mes.role.controller; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mes.role.entity.SysRole; import com.mes.role.entity.SysRoleMenu; import com.mes.userinfo.entity.SysUserRole; import com.mes.utils.Result; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** *

* 角色表 前端控制器 *

* * @author zhoush * @since 2024-04-11 */ @RestController @RequestMapping("/role/sys-role") public class SysRoleController { @PreAuthorize("hasAuthority('sys:role:list')") @GetMapping("/info/{id}") public Result info(@PathVariable("id") Long id) { SysRole sysRole = sysRoleService.getById(id); // 获取角色相关联的菜单id List roleMenus = sysRoleMenuService.list(new QueryWrapper().eq("role_id", id)); List menuIds = roleMenus.stream().map(p -> p.getMenuId()).collect(Collectors.toList()); sysRole.setMenuIds(menuIds); return Result.success(sysRole); } @PreAuthorize("hasAuthority('sys:role:list')") @GetMapping("/list") public Result list(String name) { Page pageData = sysRoleService.page(getPage(), new QueryWrapper() .like(StrUtil.isNotBlank(name), "name", name) ); return Result.success(pageData); } @PostMapping("/save") @PreAuthorize("hasAuthority('sys:role:save')") public Result save(@Validated @RequestBody SysRole sysRole) { sysRole.setCreated(LocalDateTime.now()); sysRole.setStatu(Const.STATUS_ON); sysRoleService.save(sysRole); return Result.success(sysRole); } @PostMapping("/update") @PreAuthorize("hasAuthority('sys:role:update')") public Result update(@Validated @RequestBody SysRole sysRole) { sysRole.setUpdated(LocalDateTime.now()); sysRoleService.updateById(sysRole); // 更新缓存 sysUserService.clearUserAuthorityInfoByRoleId(sysRole.getId()); return Result.success(sysRole); } @PostMapping("/delete") @PreAuthorize("hasAuthority('sys:role:delete')") @Transactional public Result info(@RequestBody Long[] ids) { sysRoleService.removeByIds(Arrays.asList(ids)); // 删除中间表 sysUserRoleService.remove(new QueryWrapper().in("role_id", ids)); sysRoleMenuService.remove(new QueryWrapper().in("role_id", ids)); // 缓存同步删除 Arrays.stream(ids).forEach(id -> { // 更新缓存 sysUserService.clearUserAuthorityInfoByRoleId(id); }); return Result.success(""); } @Transactional @PostMapping("/perm/{roleId}") @PreAuthorize("hasAuthority('sys:role:perm')") public Result info(@PathVariable("roleId") Long roleId, @RequestBody Long[] menuIds) { List sysRoleMenus = new ArrayList<>(); Arrays.stream(menuIds).forEach(menuId -> { SysRoleMenu roleMenu = new SysRoleMenu(); roleMenu.setMenuId(menuId); roleMenu.setRoleId(roleId); sysRoleMenus.add(roleMenu); }); // 先删除原来的记录,再保存新的 sysRoleMenuService.remove(new QueryWrapper().eq("role_id", roleId)); sysRoleMenuService.saveBatch(sysRoleMenus); // 删除缓存 sysUserService.clearUserAuthorityInfoByRoleId(roleId); return Result.success(menuIds); } }