按角色

时间:2015-10-17 18:50:10

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我使用个人身份验证方法创建了一个新的MVC项目,其中ASP.NET Identity作为我的身份验证和授权框架。我成功为应用添加了3个角色:AdminCustomerOwner

现在,我已经在我的HomeController中制作了三种操作方法:"所有管理员","所有客户","所有者" 。在每种操作方法中,如何显示每个角色中的用户及其总计数?当我点击"所有管理员"它显示所有具有管理员角色的用户,并且与"所有客户"相同。和#34;所有者"动作。

3 个答案:

答案 0 :(得分:6)

您可以使用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发送到显示用户及其总数的视图。

答案 1 :(得分: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
    };

答案 2 :(得分:1)

我找不到SingleAsync的{​​{1}}方法,如下所述 CodeCaster。

因此,还有另一种方法可以通过名称获得角色:

RoleManager

然后获取用户:

        string roleName = "Employee";

        var role = await RoleManager.FindByNameAsync(roleName);