我无法弄清楚如何编写可以解决此要求的规则:
我们假设我有这个要求:
<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
元素至少有一个共同的CategoryValue
。
在上面的示例中:
我的问题不在于我应该使用哪个functionId
,而是如何结合这些条件以使规则符合我的描述?如何比较具有相同GenericValue
的节点的@name
元素?
我想我必须在主题和资源“cat1”的值之间使用string-at-least-one-member-of
函数,然后在主题和资源“cat2”之间使用@name
函数,但真正的困难是PDP不知道Category
元素的Sub paste_values()
Dim wb_A As Workbook, ws_A As Worksheet
Dim wb_B As Workbook, ws_B As Worksheet
Dim last_row As Long
Set wb_A = ThisWorkbook
Set ws_A = wb_A.Sheets(1)
Set wb_B = Workbooks("WorkbookB")
Set ws_B = wb_B.Sheets(1)
With ws_A
last_row = .Range("A" & .Rows.Count).End(xlUp).Row
End With
ws_B.Range("A2:AX" & last_row).Value = ws_A.Range("A2:AX" & last_row).Value
End Sub
,所以我不能直接在规则中硬编码,我不知道如何选择它们来执行检查。
对此有什么想法吗?
答案 0 :(得分:0)
首先,您的请求无效。你缺少一些元素,例如。
其次,我建议您不要在XACML中使用XPath。它使您的政策难以编写(因此您的问题),难以维护,难以阅读(审计)。它在某种程度上违背了XACML的目的。让PEP进行繁重的XML处理,并使用属性值而不是XML内容发送属性。
此外,您无法控制XACML中XML中不同元素/属性值的迭代。我可以使用特定的@name
值来实现您的用例,但我无法通过一组值来实现它。
假设有一个值,您必须按如下方式实现条件:
<xacml3:Rule RuleId="axiomatics-example-xacml30" Effect="Permit" xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml3:Target/>
<xacml3:Condition >
<xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
<xacml3:AttributeSelector Path="/Categories/Category[@name='cat1']/CategoryValue/text()" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"/>
<xacml3:AttributeSelector Path="/Categories/Category[@name='cat1']/CategoryValue/text()" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"/>
</xacml3:Apply>
</xacml3:Condition>
</xacml3:Rule>
但你不能真正迭代不同的值