Как применить правила 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>
Другие вопросы по тегам