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>
当前政策似乎存在两个不同的问题。
- 属性 名称是
Name
,而不是 name
(参见 IGroup)
- 您不能使用
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"))">
我正在尝试限制一个组访问一个操作。但有一些错误:
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>
当前政策似乎存在两个不同的问题。
- 属性 名称是
Name
,而不是name
(参见 IGroup) - 您不能使用
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"))">