Фильтровать пользователей на основе ролей в c # linq - PullRequest
0 голосов
/ 23 мая 2019

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

Я отправляю свой запрос API с некоторыми ролями, такими как «гость», «админ».Api должен возвращать только пользователей с этими ролями

. Вот как я фильтрую пользователей List<string> roles -> это переменная с именами ролей из внешнего интерфейса, предположим, что "admin"

ролей= "admin" -> но может иметь больше ролей

UserRoleMappings - это свойство навигации, которое содержит комбинацию идентификатора пользователя и идентификатора роли для сохранения ролей конкретного пользователя

. Теперь при получении всех пользователей мне бы хотелосьчтобы отфильтровать их так, чтобы

query.Where(user => user.UserRoleMappings.Any(urm => roles.Contains(urm.UserRole.Name)));

Этот запрос выбирал пользователей, имеющих роли «admin» + «гости», как я применил, содержит.Но мне нужны пользователи, которые имеют только роль администратора

beacuse

user

1  user1
2 user2

role
1 admin
2 guest

userMapping
1 1
1 2
2 1

Api должен только возвращать user2, но он также возвращает user1.Этот метид должен быть общим и работать с несколькими ролями

Спасибо и С уважением

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Если вам нужны пользователи, у которых есть только роль администратора и другие роли, которые вы не можете выполнять

var adminUsers = query
    .Where(user => user.UserRoleMappings.All(urm => urm.UserRole.Name == "admin"));

потому что, если «все» их роли называются «admin», это обязательно единственная роль, которую они имеют.

0 голосов
/ 27 мая 2019

Вы должны использовать select и Where, query.Select (user => user.UserRoleMappings.where (urm => role.Contains (urm.UserRole.Name))). ToList ();

теперь ваше предложение where будет возвращать только соответствующий элемент

...