2025-07-09 13:57:43 +08:00
|
|
|
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")]
|
2025-07-09 15:40:47 +08:00
|
|
|
[Route("api/v1/[controller]/[action]")]
|
2025-07-09 13:57:43 +08:00
|
|
|
public class AdminRoleControllers:ControllerBase
|
|
|
|
{
|
|
|
|
|
|
|
|
private readonly RoleManager<RoleModel> _roleManager;
|
|
|
|
private readonly UserManager<UserModel> _userManager; // Assuming UserModel is the type of user
|
|
|
|
|
|
|
|
public AdminRoleControllers(RoleManager<RoleModel> roleManager, UserManager<UserModel> userManager)
|
|
|
|
{
|
|
|
|
_roleManager = roleManager;
|
|
|
|
_userManager = userManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
[HttpPost]
|
|
|
|
public async Task<IActionResult> 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<IActionResult> 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))));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 通过角色查询用户,支持分页
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost]
|
|
|
|
public async Task<IActionResult> 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<UserModel> Users { get; set; }
|
|
|
|
}
|
|
|
|
}
|