| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package com.xuekairui.user.controller;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.xuekairui.common.Result;
- import com.xuekairui.user.dto.AdminUserResponse;
- import com.xuekairui.user.dto.UpdateRoleRequest;
- import com.xuekairui.user.enums.OperationType;
- import com.xuekairui.user.service.AdminUserService;
- import com.xuekairui.user.service.OperationAuditLogService;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.validation.Valid;
- import lombok.RequiredArgsConstructor;
- import org.springframework.web.bind.annotation.*;
- /**
- * 运营用户管理接口(超级管理员)
- * <p>
- * 用户角色管理:查询用户列表、修改用户角色。
- * 仅 SUPER_ADMIN 可访问,由 SecurityConfig 控制。
- */
- @RestController
- @RequestMapping("/api/admin/users")
- @RequiredArgsConstructor
- public class AdminUserController {
- private final AdminUserService adminUserService;
- private final OperationAuditLogService auditLogService;
- /**
- * 分页查询用户列表(不支持删除操作)
- * GET /api/admin/users?page=1&size=20&userId=1&phone=138&nickname=测试&role=ADMIN
- */
- @GetMapping
- public Result<Page<AdminUserResponse>> listUsers(
- @RequestParam(defaultValue = "1") Integer page,
- @RequestParam(defaultValue = "20") Integer size,
- @RequestParam(required = false) Long userId,
- @RequestParam(required = false) String phone,
- @RequestParam(required = false) String nickname,
- @RequestParam(required = false) String role) {
- return Result.success(adminUserService.listUsers(page, size, userId, phone, nickname, role));
- }
- /**
- * 强制踢出用户(使所有Token失效,强制重新登录)
- * POST /api/admin/users/{userId}/kick
- */
- @PostMapping("/{userId}/kick")
- public Result<String> kickUser(
- @PathVariable Long userId,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- adminUserService.kickUser(userId, operatorId);
- auditLogService.logSuccess(operatorId, "管理员", operatorRole,
- OperationType.USER_UPDATE, "USER_KICK:" + userId, userId);
- return Result.success("用户已被强制退出,下次请求将返回1304");
- }
- /**
- * 修改用户角色(仅超级管理员)
- * PUT /api/admin/users/{userId}/role
- */
- @PutMapping("/{userId}/role")
- public Result<AdminUserResponse> updateUserRole(
- @PathVariable Long userId,
- @Valid @RequestBody UpdateRoleRequest request,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- AdminUserResponse response = adminUserService.updateUserRole(userId, request, operatorId);
- auditLogService.logSuccess(operatorId, "管理员", operatorRole,
- OperationType.USER_UPDATE, "USER_ROLE:" + userId + "->" + request.getRole(), userId);
- return Result.success(response);
- }
- private String getOperatorRole(HttpServletRequest request) {
- String role = (String) request.getAttribute("role");
- return role != null ? role : "ADMIN";
- }
- }
|