我有一个像"accessTo" = ["123", "123-edit"]
这样的主题
以及"interestedId" = "123"
现在我要写一个条件-它检查与“ -Access”中的“ -edit”串联的“ interestedId”等于“ AccessTo”中的“ 123-edit”。
我正在尝试编写这样的规则
anyOfAny_xacml1(function[stringEqual], "accessTo", "interestedId"+"-edit")
不允许这样做。
感谢您的帮助。
答案 0 :(得分:2)
除了Keerthi S的答案...
如果您知道interestedId
仅应有一个值,则可以这样做以防止不确定的情况发生:
stringBagSize(interestedId) == 1 && anyOfAny(function[stringEqual], accessTo, stringOneAndOnly(interestedId) + "-edit")
如果存在多个值,则评估将在达到仅期望一个值的函数之前停止。如果存在多个值,则此条件将返回false。
另一方面,如果interestedId
可以有多个值,那么它将起作用:
anyOfAny(function[stringEqual], accessTo, map(function[stringConcatenate],interestedId, "-edit"))
map函数会将stringConcatenate函数应用于包中的所有值。
答案 1 :(得分:1)
由于公理产品符合XACML specification,因此默认情况下假定所有属性都包含多个值(称为“袋子”)。
因此,如果您想将字符串附加到属性,请对属性使用stringOneAndOnly
XACML函数,以指示该属性只能有一个值。
因此,假设您的意思是accessTo
的属性ID为Attributes.access_subject.subject_id
,interestedId
的属性ID为Attributes.resource.resource_id
,而anyOfAny_xacml1
等效于{{1} } XACML函数,结果条件看起来像是
anyOfAny