using System.Security.Claims; using HoneyBox.Admin.Filters; using HoneyBox.Admin.Models.AdminUser; using HoneyBox.Admin.Models.Common; using HoneyBox.Admin.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace HoneyBox.Admin.Controllers; /// /// 管理员管理控制器 /// [ApiController] [Route("api/admin/users")] [Authorize] public class AdminUserController : ControllerBase { private readonly IAdminUserService _adminUserService; private readonly ILogger _logger; public AdminUserController(IAdminUserService adminUserService, ILogger logger) { _adminUserService = adminUserService; _logger = logger; } /// /// 获取管理员分页列表 /// /// 查询请求 /// 分页结果 [HttpGet] public async Task>> GetList([FromQuery] AdminUserQueryRequest request) { var result = await _adminUserService.GetListAsync(request); return ApiResponse>.Success(result); } /// /// 获取管理员详情 /// /// 管理员ID /// 管理员详情 [HttpGet("{id:long}")] public async Task> GetById(long id) { var result = await _adminUserService.GetByIdAsync(id); return ApiResponse.Success(result); } /// /// 创建管理员 /// /// 创建请求 /// 新管理员ID [HttpPost] [OperationLog("管理员管理", "创建管理员")] public async Task> Create([FromBody] CreateAdminUserRequest request) { var createdBy = GetCurrentUserId(); var id = await _adminUserService.CreateAsync(request, createdBy); return ApiResponse.Success(id, "创建成功"); } /// /// 更新管理员 /// /// 管理员ID /// 更新请求 [HttpPut("{id:long}")] [OperationLog("管理员管理", "更新管理员")] public async Task Update(long id, [FromBody] UpdateAdminUserRequest request) { await _adminUserService.UpdateAsync(id, request); return ApiResponse.Success("更新成功"); } /// /// 删除管理员 /// /// 管理员ID [HttpDelete("{id:long}")] [OperationLog("管理员管理", "删除管理员")] public async Task Delete(long id) { await _adminUserService.DeleteAsync(id); return ApiResponse.Success("删除成功"); } /// /// 获取管理员已分配的角色ID列表 /// /// 管理员ID /// 角色ID列表 [HttpGet("{id:long}/roles")] public async Task>> GetRoles(long id) { var result = await _adminUserService.GetRoleIdsAsync(id); return ApiResponse>.Success(result); } /// /// 分配角色给管理员 /// /// 管理员ID /// 分配请求 [HttpPut("{id:long}/roles")] [OperationLog("管理员管理", "分配角色")] public async Task AssignRoles(long id, [FromBody] AssignRolesRequest request) { await _adminUserService.AssignRolesAsync(id, request.RoleIds); return ApiResponse.Success("分配成功"); } /// /// 获取管理员已分配的专属菜单ID列表 /// /// 管理员ID /// 菜单ID列表 [HttpGet("{id:long}/menus")] public async Task>> GetMenus(long id) { var result = await _adminUserService.GetMenuIdsAsync(id); return ApiResponse>.Success(result); } /// /// 分配用户专属菜单 /// /// 管理员ID /// 分配请求 [HttpPut("{id:long}/menus")] [OperationLog("管理员管理", "分配专属菜单")] public async Task AssignMenus(long id, [FromBody] AssignUserMenusRequest request) { await _adminUserService.AssignMenusAsync(id, request.MenuIds); return ApiResponse.Success("分配成功"); } /// /// 分配部门 /// /// 管理员ID /// 分配请求 [HttpPut("{id:long}/department")] [OperationLog("管理员管理", "分配部门")] public async Task AssignDepartment(long id, [FromBody] AssignDepartmentRequest request) { await _adminUserService.AssignDepartmentAsync(id, request.DepartmentId); return ApiResponse.Success("分配成功"); } /// /// 设置管理员状态 /// /// 管理员ID /// 状态请求 [HttpPut("{id:long}/status")] [OperationLog("管理员管理", "设置状态")] public async Task SetStatus(long id, [FromBody] SetStatusRequest request) { await _adminUserService.SetStatusAsync(id, request.Status == 1); return ApiResponse.Success("设置成功"); } /// /// 重置密码 /// /// 管理员ID /// 重置密码请求 [HttpPut("{id:long}/reset-password")] [OperationLog("管理员管理", "重置密码")] public async Task ResetPassword(long id, [FromBody] ResetPasswordRequest request) { await _adminUserService.ResetPasswordAsync(id, request.NewPassword); return ApiResponse.Success("密码重置成功"); } /// /// 获取当前用户ID /// private long GetCurrentUserId() { var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier); if (userIdClaim == null || !long.TryParse(userIdClaim.Value, out var userId)) { throw new AdminException(AdminErrorCodes.TokenInvalid, "无效的用户身份"); } return userId; } }