using AGSS.Models.Entities; using AGSS.Models.Template; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; namespace AGSS.Controllers.Admin; [Authorize(Roles = "Admin")] [Route("api/v1/[controller]/[action]")] public class AdminRoleControllers:ControllerBase { private readonly RoleManager _roleManager; private readonly UserManager _userManager; // Assuming UserModel is the type of user public AdminRoleControllers(RoleManager roleManager, UserManager userManager) { _roleManager = roleManager; _userManager = userManager; } [HttpPost] public async Task AddRole([FromBody] RoleModel role) { if (role == null || string.IsNullOrWhiteSpace(role.Name)) { return Ok(new ReturnTemplate(400,"创建失败,请提供名字","")); } var result = await _roleManager.CreateAsync(role); if (result.Succeeded) { return Ok(new ReturnTemplate(200,"创建成功",role)); } else { return Ok(new ReturnTemplate(StatusCodes.Status500InternalServerError,"创建失败","Failed to create role: " + string.Join(", ", result.Errors.Select(e => e.Description)))); } } [HttpPost] public async Task EndowRole(string userId, string roleName) { var user = await _userManager.FindByIdAsync(userId); if (user == null) { return Ok(new ReturnTemplate(400, "用户不存在", "")); } var role = await _roleManager.FindByNameAsync(roleName); if (role == null) { return Ok(new ReturnTemplate(400, "角色不存在", "")); } var result = await _userManager.AddToRoleAsync(user, role.Name); if (result.Succeeded) { return Ok(new ReturnTemplate(200, "角色分配成功", user)); } else { return Ok(new ReturnTemplate(StatusCodes.Status500InternalServerError, "角色分配失败", "Failed to endow role: " + string.Join(", ", result.Errors.Select(e => e.Description)))); } } /// /// 通过角色查询用户,支持分页 /// /// [HttpPost] public async Task SearchUserFromRole([FromBody] SearchUserFromRoleRequest request) { if (string.IsNullOrWhiteSpace(request.RoleName)) { return Ok(new ReturnTemplate(400, "角色名称不能为空", null)); } var role = await _roleManager.FindByNameAsync(request.RoleName); if (role == null) { return Ok(new ReturnTemplate(400, "角色不存在", null)); } var usersInRole = await _userManager.GetUsersInRoleAsync(role.Name); var totalUsers = usersInRole.Count; var pagedUsers = usersInRole .Skip((request.Page - 1) * request.PageSize) .Take(request.PageSize) .ToList(); var response = new SearchUserFromRoleResponse { TotalCount = totalUsers, Users = pagedUsers }; return Ok(new ReturnTemplate(200, "查询成功", response)); } public class SearchUserFromRoleRequest { public string RoleName { get; set; } public int Page { get; set; } = 1; public int PageSize { get; set; } = 10; } public class SearchUserFromRoleResponse { public int TotalCount { get; set; } public List Users { get; set; } } }