Как применить правила XACML к каждому дочернему URI?
Я работаю с политиками XACML, и у меня есть правило, которое включает цель ресурса, подобную следующему:
<Resources>
<Resource>
<ResourceMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:anyURI-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">/MyDirectory</AttributeValue>
<ResourceAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#anyURI"/>
</ResourceMatch>
</Resource>
</Resources>
Я хочу, чтобы это правило распространялось на все подкаталоги /Mydirectory
, Тем не менее, если бы я должен был оценить запрос с ресурсом /MyDirectory/MySubdirectory
Я бы получил DECISION_NOT_APPLICABLE (3
) ответ.
Есть ли функция XQuery, которая позволила бы мне применить правило ко всем подкаталогам одного каталога?
1 ответ
Решение
Вы можете использовать urn:oasis:names:tc:xacml:2.0:function:anyURI-regexp-match и определить AttributeValue как регулярное выражение.
<Resources>
<Resource>
<ResourceMatch MatchId="urn:oasis:names:tc:xacml:2.0:function:anyURI-regexp-match">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">^/MyDirectory/</AttributeValue>
<ResourceAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#anyURI"/>
</ResourceMatch>
</Resource>
</Resources>