Список всех пользователей в определенной роли - PullRequest
0 голосов
/ 24 октября 2019

В ASP.NET Core 2.2 MVC я пытаюсь получить список всех пользователей с определенной ролью.
Fx. список всех пользователей с ролью «Администратор»:

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: преобразование невозможно из «string "to Microsoft.AspNetCore.Identity.IdentityUser

Это вопросы новичка, поэтому может быть очень простым для акулы :-) Заранее большое спасибо ...

1 Ответ

0 голосов
/ 24 октября 2019

GetUsersInRoleAsync возвращает список IdentityUser объектов. Чтобы получить список идентификаторов, вам необходимо получить доступ к свойству 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...