如何在ASP.NET MVC 5的标识</applicationuser>中的角色上过滤ICollection <applicationuser>

时间:2014-03-26 20:41:06

标签: c# asp.net-mvc entity-framework asp.net-identity asp.net-roles

我添加了3个角色:

  1. 管理员
  2. 员工
  3. 注册
  4. 现在我想显示所有Registered个用户的列表。 我担心我没有获得身份系统,因为我试图做这样的事情:

    剧透警报:不工作代码

    var listOfNames = _unitOfWork.UserRepository.All()
                                                .Where(u => u.Roles.Contains("Registered"))
                                                .ToList();
    

    这显然不起作用,所以我去寻找答案。不幸的是我没有得到任何。我能找到的最接近的是斯科特艾伦的一篇帖子,他提到IUserRoleStore有以下实现:

    • 将用户添加到角色
    • 获取用户的所有角色
    • 检查用户是否处于特定角色
    • 从角色中删除用户

    但仍然没有得到它:/

    我也尝试了this Question中的方法,但是Roles.Select(r => r.Name).Contains("client")不起作用,因为无法找到Name属性?

    如何获取ApplicationUser对象列表?

    更新


    肖恩的回答帮助我深入挖掘了一下。我不确定这是最好的方式,但它可以满足我的需求。

    var users = context.Users;
    var roleUsers = context.Roles.Single(one => one.Name == "Registered").Users;
    
    names = (from r in roleUsers
    join u in users on r.UserId equals u.Id
    select u.UserName).ToList();
    

    如果效率低下,我很想知道为什么以及如何改进它。

1 个答案:

答案 0 :(得分:2)

假设AspNetIdentity2.0 ...我发现你正在使用存储库模式,那么你可以使用RoleManager

var users = RoleManager.Roles.Single(x => x.Name == "Registered").Users;

不幸的是(并且误导性地)这会返回UserRoles的列表,但至少您已经获得了用户&#39; UserId,从那里可以获取Users