AdminUserController.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package com.xuekairui.user.controller;
  2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  3. import com.xuekairui.common.Result;
  4. import com.xuekairui.user.dto.AdminUserResponse;
  5. import com.xuekairui.user.dto.UpdateRoleRequest;
  6. import com.xuekairui.user.enums.OperationType;
  7. import com.xuekairui.user.service.AdminUserService;
  8. import com.xuekairui.user.service.OperationAuditLogService;
  9. import jakarta.servlet.http.HttpServletRequest;
  10. import jakarta.validation.Valid;
  11. import lombok.RequiredArgsConstructor;
  12. import org.springframework.web.bind.annotation.*;
  13. /**
  14. * 运营用户管理接口(超级管理员)
  15. * <p>
  16. * 用户角色管理:查询用户列表、修改用户角色。
  17. * 仅 SUPER_ADMIN 可访问,由 SecurityConfig 控制。
  18. */
  19. @RestController
  20. @RequestMapping("/api/admin/users")
  21. @RequiredArgsConstructor
  22. public class AdminUserController {
  23. private final AdminUserService adminUserService;
  24. private final OperationAuditLogService auditLogService;
  25. /**
  26. * 分页查询用户列表(不支持删除操作)
  27. * GET /api/admin/users?page=1&size=20&userId=1&phone=138&nickname=测试&role=ADMIN
  28. */
  29. @GetMapping
  30. public Result<Page<AdminUserResponse>> listUsers(
  31. @RequestParam(defaultValue = "1") Integer page,
  32. @RequestParam(defaultValue = "20") Integer size,
  33. @RequestParam(required = false) Long userId,
  34. @RequestParam(required = false) String phone,
  35. @RequestParam(required = false) String nickname,
  36. @RequestParam(required = false) String role) {
  37. return Result.success(adminUserService.listUsers(page, size, userId, phone, nickname, role));
  38. }
  39. /**
  40. * 强制踢出用户(使所有Token失效,强制重新登录)
  41. * POST /api/admin/users/{userId}/kick
  42. */
  43. @PostMapping("/{userId}/kick")
  44. public Result<String> kickUser(
  45. @PathVariable Long userId,
  46. HttpServletRequest httpRequest) {
  47. Long operatorId = (Long) httpRequest.getAttribute("userId");
  48. String operatorRole = getOperatorRole(httpRequest);
  49. adminUserService.kickUser(userId, operatorId);
  50. auditLogService.logSuccess(operatorId, "管理员", operatorRole,
  51. OperationType.USER_UPDATE, "USER_KICK:" + userId, userId);
  52. return Result.success("用户已被强制退出,下次请求将返回1304");
  53. }
  54. /**
  55. * 修改用户角色(仅超级管理员)
  56. * PUT /api/admin/users/{userId}/role
  57. */
  58. @PutMapping("/{userId}/role")
  59. public Result<AdminUserResponse> updateUserRole(
  60. @PathVariable Long userId,
  61. @Valid @RequestBody UpdateRoleRequest request,
  62. HttpServletRequest httpRequest) {
  63. Long operatorId = (Long) httpRequest.getAttribute("userId");
  64. String operatorRole = getOperatorRole(httpRequest);
  65. AdminUserResponse response = adminUserService.updateUserRole(userId, request, operatorId);
  66. auditLogService.logSuccess(operatorId, "管理员", operatorRole,
  67. OperationType.USER_UPDATE, "USER_ROLE:" + userId + "->" + request.getRole(), userId);
  68. return Result.success(response);
  69. }
  70. private String getOperatorRole(HttpServletRequest request) {
  71. String role = (String) request.getAttribute("role");
  72. return role != null ? role : "ADMIN";
  73. }
  74. }