#azure-api-management
Вопрос:
Я хочу создать политику, в которой наши сотрудники могли бы вызывать API без учета какой-либо квоты. Наши сотрудники принадлежат к одной определенной группе в решении для управления API. Я хочу, чтобы все остальные пользователи, не входящие в эту группу, учитывали квоту использования для своей подписки.
Моя проблема в том, что я не могу понять, как проверить, находится ли пользователь в определенной группе в when
состоянии, потому что список групп в объекте пользователя-это список объектов.
Это кажется простым, когда это карта (например, заголовки) или просто массив строк:
<!-- for maps, but it is not a map -->
<when condition="@(context.User.Groups.ContainsKey("myGroup"))" />
<!-- for arrays if you know all properties -->
<when condition="@(context.User.Groups.Contains("myGroup"))" />
Как я могу создать подобную политику, если у меня есть только имя группы, а не ее идентификатор?
<when condition="@(!context.User.isInGroup("myGroup")">
<quota calls="10000" bandwidth="40000" renewal-period="3600" />
</when>
Или, выражаясь по-другому;
Как я могу узнать, содержит ли список объектов объект с определенным значением свойства? Что — то вроде поиска в JavaScript.
Ответ №1:
Используйте Linq Любой метод, чтобы получить значение true или false, в зависимости от того, существует данное имя или нет.
Чтобы проверить, входит ли User
он в данную группу:
<when condition="@(context.User.Groups.Any(x => x.Name == "myGroup"))">
Если вы хотите быть сверхбезопасным, проверьте также User
, существует ли объект (он может быть равен нулю, если вы вызываете API со «Встроенной подпиской на полный доступ»).:
<when condition="@(context.User != null amp;amp; context.User.Groups.Any(x => x.Name == "myGroup"))">
И вернуться к вышеуказанному условию и проверить User
, не находится ли он в данной группе:
<when condition="@(context.User == null || !context.User.Groups.Any(x => x.Name == "myGroup"))">
Комментарии:
1. Именно то, что я искал, большое спасибо! Я видел, что свойство Groups реализует IEnumerable, но я не мог понять, какие методы доступны в этом интерфейсе.