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;
}
}