按角色获取ASP.NET Identity用户

4
我使用ASP.NET Identity框架中的个人身份验证方法创建了一个新的MVC项目,用作身份验证和授权。我已经成功将三个角色 Admin, Customer, Owner 添加到应用程序中。
现在,我在HomeController中创建了三个操作方法:“所有管理员”,“所有客户”和“所有业主”。 如何在每个操作方法中显示属于各个角色的用户及其总数?也就是说,当我单击“所有管理员”时,它会显示所有拥有管理员角色的用户,当我单击“所有客户”和“所有业主”时也一样。

1
请一次只提一个问题。你的第二个问题有点宽泛,需要更多的信息和代码。请另外提一个新问题。 - CodeCaster
@enki.dev 是的,依我之见,你的编辑不应该被批准,因为它删除了太多原始含义。然而,在那之后,注意力似乎集中在获取计数上,而 OP 最初声明他们想要显示用户。使用 Linq 计算您已经查询过的记录是微不足道的。 - CodeCaster
@CodeCaster,“去掉了太多原本的意思”我想我不得不反对你的看法。 - matt.
1
@CodeCaster,明白了。看起来确实更好。感谢您的反馈,我只是想在这里尽自己的一份力量 - 下次会更努力的。 - matt.
1
@enki.dev 没问题,很乐意帮忙。你确实让它更易读了,但我认为你删掉了太多。 :) - CodeCaster
显示剩余5条评论
3个回答

9

您可以使用RoleManagerUserManager。后者只允许按照RoleId查询,所以您需要先查找角色:

// Look up the role
string roleName = "Admin";
var role = await _roleManager.Roles.SingleAsync(r => r.Name == roleName);

// Find the users in that role
var roleUsers = _userManager.Users.Where(u => u.Roles.Any(r => r.RoleId == role.Id));

现在你可以将roleUsers发送到一个视图,显示用户及其总数。

2

我曾经遇到过类似的问题,所以我使用了这个方法:

var administrators = from role in _roleManager.Roles
    from userRoles in role.Users
    join user in _userManager.Users on userRoles.UserId equals user.Id
    where role.Name == "Administrator"
    select new UserVm()
    {
        Id = user.Id,
        FirstName = user.FirstName,
        LastName = user.LastName,
        Email = user.Email,
        Role = role.Name
    };

1
我找不到CodeCaster描述的RoleManagerSingleAsync方法。
因此,有另一种方法可以通过名称获取角色:
        string roleName = "Employee";

        var role = await RoleManager.FindByNameAsync(roleName);

然后获取用户:
    var users  = UserManager.Users.Where(x=>x.Roles.Any(y=>y.RoleId==role.Id))
                    .Select(x => new {UserId = x.Id,FullName = x.FullName });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接