ASP.NETCore1.1如何获取所有用户及其角色?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (256)

我是.NET新手,试图获取所有注册用户的列表以及他们的角色名称,并使用viewModel将他们发送到视图中。

以下是视图模型:

public class ApplicationUserListViewModel
{
    [Display(Name = "User Email Address")]
    public string UserEmail { get; set; }

    public  List<IdentityUserRole<string>> Roles { get; set; }
}

我尝试这样做是为了让所有用户都与他们的角色一起使用,并为每个用户创建一个ViewModel,并将所有视图模型放到一个列表中,以传递给View:

var users =  _userManager.Users.ToList();
var userList = users.Select(u => 
                new ApplicationUserListViewModel {
                    UserEmail = u.Email,
                    Roles = u.Roles.ToList() }
                    ).ToList(); 

但是,当我明确地将角色分配给每个用户时,这总是为每个用户提供0个角色计数。

提问于
用户回答回答于

你可以通过在一个查询中包含相关角色来做得更好,如下所示:

foreach (var user in _userManager.Users.Include(u => u.Roles).ToList())
{              
    list.Add(new ApplicationUserListViewModel {
        UserEmail = user.Email,
        Roles = user.Roles
    });
}

或者就是这样:

var users = _userManager.Users.Include(u => u.Roles)
                        .Select(u => new ApplicationUserListViewModel {
                            UserEmail = user.Email,
                            Roles = user.Roles
                        })
                        .ToList();

ASP.NET Core Identity 2.x的更新

此解决方案对ASP.NET Core Identity 2.x无效,因为IdentityUser不再包含Roles属性。请参阅ASP.NET Core Identity 2.x的答案

用户回答回答于

好吧,我把这事办好了。这可能不是应该做的事情,但效果很好。

 List<ApplicationUserListViewModel> list = new List<ApplicationUserListViewModel>();

foreach (var user in _userManager.Users.ToList())
 {              
        list.Add(new ApplicationUserListViewModel() {
                UserEmail = user.Email,
                Roles = await _userManager.GetRolesAsync(user)
            });
 }

扫码关注云+社区

领取腾讯云代金券