117 lines
3.6 KiB
C#
117 lines
3.6 KiB
C#
|
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; }
|
||
|
}
|
||
|
}
|