从所有用户请求获取时如何获得用户角色?

我正在使用具有身份和JWT的Asp net core 3.0。我可以毫无问题地吸引所有用户,但是角色总是空值或什么都没有。

      [Route("ListUsers")]
      [AllowAnonymous]
      public IactionResult ListUsers()
      {
          var users = userManager.Users;          
          return Ok(users);
      }
huzhanyuan09 回答:从所有用户请求获取时如何获得用户角色?

您可以通过以下方式循环所有用户并获得每个用户的角色:

foreach (var user in _userManager.Users.ToList())
{
    var roles = await _userManager.GetRolesAsync(user);
}

另一种解决方案是在用户和角色之间建立多对多关系,以便您可以使用EF查询include来获取角色。基于this solution,以下代码示例在具有身份的asp.net core 3.0中工作:

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();
        });
    }
}

启动:

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true).AddRoles<ApplicationRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

并获取用户和角色(UserManager<ApplicationUser>):

 var Users = _userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();

不要忘记在UserManager<ApplicationUser>/SignInManager<ApplicationUser>中更改为_LoginPartial.cshtml

本文链接:https://www.f2er.com/3166024.html

大家都在问