在我的应用程序中,我有在AspNetUserRoles
保存角色/角色的用户和根本没有角色的用户。我想让所有用户"谁有任何角色"。所以,我试图将所有记录保存在AspNetUserRoles
表中,但我找不到任何方法来做到这一点。此外,我不想获取所有用户,然后检查他们是否分配了任何角色,因为这会导致性能下降。 (只有1%的用户有角色。)那么,有什么方法吗?我正在使用.Net Core 2.0。
代码如下:
using Microsoft.AspNetCore.Identity;
using System;
using System.Linq;
namespace GebzeShared.Modules.GUI.Admin.Workflow
{
public class MyClassWorkflow : IMyClassContract
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;
public MyClassWorkflow(
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager
)
{
this._userManager = userManager;
this._roleManager = roleManager;
}
public dynamic GetUserRoleList(ClaimsPrincipal user)
{
try
{
var currentUser = this._userManager.FindByEmailAsync(user.Identity.Name).GetAwaiter().GetResult();
var user2 = this._personnelRepository.Table.FirstOrDefault(x => x.Email == user.Identity.Name);
var userRoleList = this._userManager.Users.Where(x => this._userManager.IsInRoleAsync(currentUser, "anyrole")); //dont want to use this
{
RoleName = role.Name
}).ToList<dynamic>();
return new
{
RoleList = roleList,
};
}
catch (Exception exp)
{
return "Error";
}
}
}
}
答案 0 :(得分:0)
而不是查询UserManager
只查询User
对象上的角色集。
userManager.Users.Where(u => u.Roles.Any(r => r.RoleName == "anyrole"));
答案 1 :(得分:0)
您可以执行以下操作(您需要注入userManger
和roleManager
):
List<ApplicationUser> usersInRole = new List<ApplicationUser>();
foreach (var role in roleManager.Roles)
{
usersInRole.AddRange(await userManager.GetUsersInRoleAsync(role.Name));
}