You can loop all the users and get the roles of each user by :
foreach (var user in _userManager.Users.ToList())
{
var roles = await _userManager.GetRolesAsync(user);
}
Another solution is creating many to many relationship between users and roles , so that you can include
with EF query to get the roles . Base on this solution , below code sample works in asp.net core 3.0 with identity :
ApplicationUser :
foreach (var user in _userManager.Users.ToList())
{
var roles = await _userManager.GetRolesAsync(user);
}
ApplicationRole :
public class ApplicationRole : IdentityRole
{
public ICollection<ApplicationUserRole> UserRoles { get; set; }
}
ApplicationUserRole :
public class ApplicationUserRole : IdentityUserRole<string>
{
public virtual ApplicationUser User { get; set; }
public virtual ApplicationRole Role { get; set; }
}
ApplicationDbContext :
public class ApplicationDbContext
: IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>,
ApplicationUserRole, IdentityUserLogin<string>,
IdentityRoleClaim<string>, IdentityUserToken<string>>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<ApplicationUserRole>(userRole =>
{
userRole.HasKey(ur => new { ur.UserId, ur.RoleId });
userRole.HasOne(ur => ur.Role)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.RoleId)
.IsRequired();
userRole.HasOne(ur => ur.User)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.UserId)
.IsRequired();
});
}
}
Startup :
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true).AddRoles<ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
And get users and roles (UserManager<ApplicationUser>
) :
var Users = _userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();
Don't forget to change to UserManager<ApplicationUser>/SignInManager<ApplicationUser>
in _LoginPartial.cshtml
.