.Net Core Identity Framework Получение пользователей по заявке

В нашем веб-API .NET Core мы настроили авторизацию на основе утверждений, и она отлично работает. Мы создали ролевые заявки и назначаем роли пользователям. Мы не используем заявки пользователей.

Теперь у меня есть требование, чтобы у пользователей были конкретные претензии. В UserManager есть метод GetUsersByClaimAsync (Claim), который, кажется, учитывает только заявки пользователей. Не претендует на роль. Так что в моем случае его нельзя использовать.

Итак, я думал о получении ролей по требованию, а затем о получении пользователей по ролям (не очень эффективно, так как для получения пользователей каждой роли отдельно требуется несколько вызовов БД). Но даже для этого не существует прямого метода получения ролей по утверждениям в UserManager или RoleManager.

Мне кажется, что нет чистого способа добиться этого, кроме настраиваемых запросов.

Я не уверен, что мне что-то здесь не хватает. Кто-нибудь добился этого, используя лучший способ?

Спасибо


person Wijitha    schedule 03.01.2020    source источник
comment
Вам потребуются некоторые свойства навигации среди идентификационных сущностей. Для авторизации на основе ролей, я думаю, вам следует забыть об идентификаторе asp.net и реализовать настраиваемые сущности.   -  person Hadi Samadzad    schedule 03.01.2020
comment
У меня такой же сценарий, я пытаюсь исправить это с помощью собственного репозитория Identity Server 4.   -  person EHU    schedule 03.01.2020


Ответы (1)


Теперь у меня есть требование, чтобы у пользователей были конкретные претензии. В UserManager есть метод GetUsersByClaimAsync (Claim), который, кажется, учитывает только заявки пользователей. Не претендует на роль. Так что в моем случае его нельзя использовать.

Думаю, вы могли бы попробовать _ 1_ api:

var users = await _userManager.GetUsersInRoleAsync("Role1");

Кстати, чтобы использовать указанный выше API, вам необходимо включить Role связанные службы:

AddDefaultIdentity<IdentityUser>(options => { /*...*/ })
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<AppIdentityDbContext>();
person itminus    schedule 06.01.2020
comment
Спасибо за ответ. Да, это был запасной вариант. Чтобы использовать это, во-первых, необходимо получить все роли, имеющие конкретное утверждение (их может быть несколько), и вызвать GetUsersInRole несколько раз. Нет даже способа получить роли, имеющие претензию. Поэтому нужно вручную добавить некоторые навигационные реквизиты и сделать это. - person Wijitha; 06.01.2020