Azure API 管理选择限制特定组的策略

Azure API management choose policy for restricting particular group

我正在尝试限制一个组访问一个操作。但有一些错误:

One or more fields contain incorrect values: Error in element 'choose' on line 15, column 6: Cannot convert lambda expression to type 'IGroup' because it is not a delegate type

请查找以下代码

 <policies>
        <inbound>
        <choose>
        <when condition="@(context.User.Groups.Contains(g => g.name == "audit"))">
             <return-response>
                  <set-status code="403" reason="Unauthorized" />
                  <set-body>Users in group audit do not have access to this method. </set-body>
             </return-response>
        </when>
    </choose>
            <base />
        </inbound>
        <backend>
            <base />
        </backend>
        <outbound>
            <base />
        </outbound>
        <on-error>
            <base />
        </on-error>
    </policies>

当前政策似乎存在两个不同的问题。

  1. 属性 名称是 Name,而不是 name(参见 IGroup
  2. 您不能使用 Contains(),而 Any() 可以使用

context.User.Groups 属性 的类型是 IEnumerable<IGroup>API Management policy expressions 仅 allow/support 类型和成员的选定列表。
受支持的 System.Linq.Enumerable class 中的 Contains() 实现没有接受 Func 的重载。它只有 Contains<TSource>(IEnumerable<TSource>, TSource)Contains<TSource>(IEnumerable<TSource>, TSource, IEqualityComparer<TSource>).

Any() 实现 有一个接受 Func (Any(IEnumerable, Func<TSource,Boolean>)).

的重载

因此您可能需要使用 Any(),像这样检查 Name 属性:

<when condition="@(context.User.Groups.Any(g => g.Name == "audit"))">