首先,在Startup.cs文件中添加使用身份验证的服务:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])),
ClockSkew = TimeSpan.Zero
};
});
在控制器中注入UserManager和RoleManager服务:
private readonly UserManager _userManager;
private readonly RoleManager _roleManager;
public UsersController(UserManager userManager, RoleManager roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
在方法中获取所有用户,然后使用UserManager的IsInRole方法来检查用户是否具有特定角色:
[HttpGet("GetUsersWithRole/{roleName}")]
public async Task GetUsersWithRole(string roleName)
{
var users = await _userManager.Users.ToListAsync();
var userRoles = new List();
foreach (var user in users)
{
if (await _userManager.IsInRoleAsync(user, roleName))
{
userRoles.Add(new { UserName = user.UserName, RoleName = roleName });
}
}
return Ok(userRoles);
}
最后,使用Postman或浏览器向API发送请求,并在末尾添加角色名称以获取相应的用户。例如,发送GET请求到/api/Users/GetUsersWithRole/Administrator将返回所有具有“Administrator”角色的用户。