12

ロール内のすべてのユーザーのリストを取得する方法は? 以前は Roles.GetUsersInRole で可能でしたが、新しい ID ではこのようなものを見つけることができません。

4

7 に答える 7

11

何らかの理由で、@ChoptimusPrime によって上記で提案された非常に優れたクエリが、ASP.NET Identity 2.2.1 でコンパイルされませんでした。私は拡張機能を書きました:

public static IQueryable<User> GetUsersInRole(DbContext db, string roleName)
{
  if (db != null && roleName != null)
  {
    var roles = db.Roles.Where(r => r.Name == roleName);
    if (roles.Any())
    {
      var roleId = roles.First().Id;
      return from user in db.Users
             where user.Roles.Any(r => r.RoleId == roleId)
             select user;
    }
  }
  return null;
}
于 2016-01-26T13:50:40.590 に答える
0

これは新しいものMVC 5 ASP.NET Identityです:

var managerRole = TMRoles.GetIdentityRole(TMRoles.Manager);
var managers = managerRole.Users;

public class TMRoles
{
    private static RoleManager<IdentityRole> RoleManager = 
        new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new TMContext()));

    public static string Manager { get { return "Manager"; } }


    public static IdentityRole GetIdentityRole(string roleName)
    {
        return RoleManager.FindByName(roleName);
    }
}
于 2014-06-17T02:45:50.730 に答える
0

Entity Framework を使用できますが、Asp.Net Identity 1.0 ではまだ使用できません。Identity 2.0 のリリースを待つ必要があります。

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString)) {
    string queryString = "SELECT AspNetUsers.UserName FROM dbo.AspNetUsers INNER JOIN dbo.AspNetUserRoles ON " + "AspNetUsers.Id=AspNetUserRoles.UserId WHERE AspNetUserRoles.RoleID='" + id + "'";
    SqlCommand command = new SqlCommand(queryString, connection);
    command.Connection.Open();

    List<string> @out = null;
    dynamic reader = command.ExecuteReader();
    while (reader.Read()) {
        if (@out == null) @out = new List<string>();
        @out.Add(reader.GetString(0));
    }

    return @out;
}
于 2014-02-25T18:57:55.130 に答える