/** * This file is part of the PlayEdu. * (c) 杭州白书科技有限公司 */ package xyz.playedu.api.controller.backend; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import xyz.playedu.api.constant.BPermissionConstant; import xyz.playedu.api.constant.BackendConstant; import xyz.playedu.api.domain.AdminPermission; import xyz.playedu.api.domain.AdminRole; import xyz.playedu.api.exception.NotFoundException; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.request.backend.AdminRoleRequest; import xyz.playedu.api.service.AdminPermissionService; import xyz.playedu.api.service.AdminRoleService; import xyz.playedu.api.types.JsonResponse; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author 杭州白书科技有限公司 * * @create 2023/2/21 15:56 */ @RestController @RequestMapping("/backend/v1/admin-role") @Slf4j public class AdminRoleController { @Autowired private AdminRoleService roleService; @Autowired private AdminPermissionService permissionService; @GetMapping("/index") public JsonResponse index() { List data = roleService.list(); return JsonResponse.data(data); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @GetMapping("/create") public JsonResponse create() { List permissions = permissionService.listOrderBySortAsc(); HashMap data = new HashMap<>(); data.put( "perm_action", permissions.stream().collect(Collectors.groupingBy(AdminPermission::getType))); return JsonResponse.data(data); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @PostMapping("/create") public JsonResponse store(@RequestBody @Validated AdminRoleRequest request) { roleService.createWithPermissionIds(request.getName(), request.getPermissionIds()); return JsonResponse.success(); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @GetMapping("/{id}") public JsonResponse edit(@PathVariable(name = "id") Integer id) throws NotFoundException { AdminRole role = roleService.findOrFail(id); // 关联的权限 List permissionIds = roleService.getPermissionIdsByRoleId(role.getId()); List permAction = new ArrayList<>(); List permData = new ArrayList<>(); if (permissionIds != null && permissionIds.size() > 0) { List permissions = permissionService.chunks(permissionIds); Map> permissionsGroup = permissions.stream().collect(Collectors.groupingBy(AdminPermission::getType)); if (permissionsGroup.get("action") != null) { permAction = permissionsGroup.get("action").stream() .map(AdminPermission::getId) .toList(); } if (permissionsGroup.get("data") != null) { permData = permissionsGroup.get("data").stream().map(AdminPermission::getId).toList(); } } HashMap data = new HashMap<>(); data.put("role", role); data.put("perm_action", permAction); data.put("perm_data", permData); return JsonResponse.data(data); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @PutMapping("/{id}") public JsonResponse update( @PathVariable(name = "id") Integer id, @RequestBody @Validated AdminRoleRequest request) throws NotFoundException { AdminRole role = roleService.findOrFail(id); if (role.getSlug().equals(BackendConstant.SUPER_ADMIN_ROLE)) { return JsonResponse.error("超级管理权限无法编辑"); } roleService.updateWithPermissionIds(role, request.getName(), request.getPermissionIds()); return JsonResponse.success(); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @DeleteMapping("/{id}") public JsonResponse destroy(@PathVariable(name = "id") Integer id) throws NotFoundException { AdminRole role = roleService.findOrFail(id); if (role.getSlug().equals(BackendConstant.SUPER_ADMIN_ROLE)) { return JsonResponse.error("超级管理角色无法删除"); } roleService.removeWithPermissions(role); return JsonResponse.success(); } }