繁体   English   中英

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

[英]Azure API management choose policy for restricting particular group

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

一个或多个字段包含不正确的值:第 15 行第 6 列元素“选择”中的错误:无法将 lambda 表达式转换为类型“IGroup”,因为它不是委托类型

请找到下面的代码

 <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 管理策略表达式仅允许/支持选定的类型和成员列表。
受支持的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"))">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM