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.*; /** * 运营用户管理接口(超级管理员) *

* 用户角色管理:查询用户列表、修改用户角色。 * 仅 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> 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 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 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"; } }