【问题标题】:How to get all users in Role (Microsoft ASP.NET Identity EntityFramework 2.0.0-beta1)?如何让所有用户成为角色(Microsoft ASP.NET Identity EntityFramework 2.0.0-beta1)?
【发布时间】:2014-04-08 04:19:42
【问题描述】:

我刚刚更新到 ASP.NET Identity EntityFramework 2.0.0-beta1,我的 Roles 类出现编译错误。也许有人可以给我一些线索如何让所有用户获得特定角色?

这是非常接近的东西,当我使用 Intellisense 浏览时,我就快到了,但需要提示 :-)。

这是更新前的工作方式:

 user.Roles.First().Role.Name.Equals("Admins")

【问题讨论】:

  • 您遇到什么错误?您似乎正在尝试访问 IsInRole("Admins")。如果您必须通过 EF 执行此操作,请考虑使用 user.Roles.Any(r => r.Name == "Admins")

标签: asp.net entity-framework asp.net-identity


【解决方案1】:

它只暴露在 EF 实现层,所以:

roleManager.FindByName("Admins").Users

【讨论】:

  • 谢谢孔先生!有没有更优雅的方式从 IdentityUserRole 表中获取管理员? code(var userIds = roleManager.FindByName("Admins").Users.Select(e => e.UserId).ToList();) var admins = userManager.Users.Where(e => userIds.Contains(e.Id));
  • Svitlana,你找到更优雅的方式了吗?这似乎应该是一件容易的事,但这很难看。
  • 我有一个问题。为什么这个结果只公开 IdentityUserRoles 属性,而不是用户?如何查看用户属性而不是导航表?
【解决方案2】:

接受的答案返回CustomUserRoles。如果您正在寻找ApplicationUsers 的列表,请尝试:

public IList<ApplicationUser> GetApplicationUsersInRole(string roleName)
{
    var selectedUserIds = from role in roleManager.Roles
                          where role.Name == roleName
                          from user in role.Users
                          select user.UserId;
    // this _users comes from the ApplicationDbContext.ApplicationUser
    return _users.Where(applicationUser => selectedUserIds.Contains(applicationUser.Id)).ToList();
}

【讨论】:

  • :-)。唯一的评论 - 我很高兴我切换到 ANGULAR/FIREBASE 并且不需要承担这个负担......但是感谢您的时间,朋友。
【解决方案3】:

我真的很喜欢 VahidN 的解决方案,但我对其进行了一些修改。我把它变成了一个使用 dbcontext 的查询。这允许您在查询中添加额外的子句(例如,deleted、emailconfirmed 等)

public IEnumerable<ApplicationUser> GetApplicationUsersInRole(string roleName)
{
      return from role in context.Roles
             where role.Name == roleName
             from userRoles in role.Users
             join user in context.Users
             on userRoles.UserId equals user.Id
             where user.EmailConfirmed == true
               && user.IsDeleted == false
             select user;
 }

【讨论】:

  • 我认为更精简的是首先获得角色var role = roleManager.FindByName(roleName);,然后查询var _usersInRole = role.Users.Select(j =&gt; context.Users.Where(k=&gt; k.Id == j.UserId)); - 这看起来不像您的查询那么繁琐,而且,您可以添加额外的查询到和你一样。
猜你喜欢
  • 2019-05-01
  • 2013-10-29
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2014-03-08
  • 2015-01-09
  • 1970-01-01
  • 2013-12-26
相关资源
最近更新 更多