AGSSbackend/AGSS/Controllers/Admin/AdminRoleControllers.cs

117 lines
3.6 KiB
C#
Raw Normal View History

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/Admin/[controller]")]
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; }
}
}