C# 按角色获取ASP.NET身份用户

C# 按角色获取ASP.NET身份用户,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我创建了一个新的MVC项目,使用ASP.NET身份作为身份验证和授权框架,使用个人身份验证方法。我成功地向应用程序添加了3个角色:管理员,客户,所有者 现在,我在我的HomeController中制定了三种操作方法:“所有管理员”、“所有客户”、“所有所有者”。如何在每个操作方法中显示每个角色中的用户及其总数?这意味着当我单击“所有管理员”时,它会显示具有管理员角色的所有用户,以及“所有客户”和“所有所有者”操作的所有用户。您可以使用RoleManager和UserManager。后者只允许您查

我创建了一个新的MVC项目,使用ASP.NET身份作为身份验证和授权框架,使用个人身份验证方法。我成功地向应用程序添加了3个角色:
管理员
客户
所有者


现在,我在我的
HomeController
中制定了三种操作方法:“所有管理员”、“所有客户”、“所有所有者”。如何在每个操作方法中显示每个角色中的用户及其总数?这意味着当我单击“所有管理员”时,它会显示具有管理员角色的所有用户,以及“所有客户”和“所有所有者”操作的所有用户。

您可以使用
RoleManager
UserManager
。后者只允许您查询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));

现在,您可以将
角色扮演者
发送到一个显示用户及其总数的视图。

我遇到了类似的问题,因此我使用了如下方法:

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

我找不到所描述的
rolemager
SingleAsync
方法 编解码器

因此,还有另一种按名称获取角色的方法:

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

请一次问一个问题。你的第二个问题有点宽泛,可能需要更多的信息和代码。为此提出一个新问题。第1点更像是信息,我认为它应该像问题。@CodeCaster,您的编辑删除了OP的部分原始问题-“我想显示所选操作的总数和信息”-他还需要用户总数,这就是为什么我将其包括在编辑中。@CodeCaster,明白了。看起来确实更好。我很感谢您的反馈,我只是想在这里尽我的一份力,下次会做得更好。@enki.dev没问题,很乐意帮忙。你确实让它更具可读性,但在我看来,你删除了太多内容。:)