列出所有具有特定角色的用户

时间:2019-10-24 18:02:20

标签: c# lambda asp.net-core-mvc asp.net-identity

在ASP.NET Core 2.2 MVC中,我试图获取具有特定角色的所有用户的列表。
Fx。名为“ Admin”的所有用户的列表:

var idsWithPermission = _userManager.GetUsersInRoleAsync("Admin").Result;
var users = _db.ApplicationUser.Where(u => idsWithPermission.Contains(u.Id)).ToListAsync();
return(users);

编译器在此处失败“ u.Id”:idsWithPermission.Contains(u.Id)

  

错误:参数1:无法从“字符串”转换为Microsoft.AspNetCore.Identity.IdentityUser

这是一个新手问题,所以对于鲨鱼来说可能非常简单:-) 提前谢谢...

1 个答案:

答案 0 :(得分:0)

GetUsersInRoleAsync返回IdentityUser对象的列表。要获取ID列表,您需要访问这些对象的Id属性。

// Get a list of users in the role
var usersWithPermission = _userManager.GetUsersInRoleAsync("Admin").Result;

// Then get a list of the ids of these users
var idsWithPermission = usersWithPermission.Select(u => u.Id);

// Now get the users in our database with the same ids
var users = _db.ApplicationUser.Where(u => idsWithPermission.Contains(u.Id)).ToListAsync();

return users;

请注意,不建议在.Result方法上使用async,因为它可能导致死锁。而是使用await并将方法设为async


还要注意,根据您的设置,如果ApplicationUser继承自IdentityUser并且身份系统已正确配置,则GetUsersInRoleAsync将已经返回ApplicationUser个对象,您只需要将它们转换为正确的类型:

// Get a list of users in the role
var usersWithPermission = _userManager.GetUsersInRoleAsync("Admin").Result;
var users = usersWithPermission.OfType<ApplicationUser>();

return users;