我不知道如何编写可以解决此要求的规则:
假设我有这个请求:
<Request>
<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
<Content>
<Categories>
<Category name="cat1">
<CategoryValue>A</CategoryValue>
<CategoryValue>B</CategoryValue>
<CategoryValue>C</CategoryValue>
</Category>
<Category name="cat2">
<CategoryValue>B</CategoryValue>
<CategoryValue>E</CategoryValue>
<CategoryValue>F</CategoryValue>
</Category>
</Categories>
</Content>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
<Content>
<Categories>
<Category name="cat1">
<CategoryValue>A</CategoryValue>
</Category>
<Category name="cat2">
<CategoryValue>A</CategoryValue>
<CategoryValue>E</CategoryValue>
<CategoryValue>F</CategoryValue>
<CategoryValue>G</CategoryValue>
</Category>
</Categories>
</Content>
</Attributes>
</Request>
我想编写一个包含具有Permit效果的规则的策略,当对于Category
资源的每个元素,主题具有Category
相同的@name
并且这两个Category
元素都具有至少一个 common 时CategoryValue
。
在上面的这个例子中:
- 资源有“cat1”和“A” - 主题有“cat1”,其中一个值为 A:允许
- 资源有“cat2”和“A”、“E”、“F”、“G” - 主题有“cat2”,值为 E(或 F):允许
- 规则的最终结果:允许
我的问题不是functionId
我应该使用哪个,而是如何结合这些条件以使规则按照我描述的方式运行?如何比较GenericValue
具有相同节点的元素@name
?
我想我将不得不string-at-least-one-member-of
在主题和资源“cat1”的值之间使用函数,然后在主题和资源“cat2”之间使用函数,但真正的困难是 PDP 不知道元素的值,所以@name
我Category
不能直接在规则中对其进行硬编码,我不知道如何特别选择它们来执行检查。
对此有任何想法吗?