3

我有一个像这样的主题"accessTo" = ["123", "123-edit"] 和一个像这样的资源"interestedId" = "123"

现在我正在尝试编写一个条件 - 它检查与“-edit”连接的“interestedId”等于“AccessTo”中的“123-edit”。

我试图写这样的规则

anyOfAny_xacml1(function[stringEqual], "accessTo", "interestedId"+"-edit") 

它不允许这样做。

任何帮助表示赞赏。

4

2 回答 2

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 函数应用于包中的所有值。

于 2018-11-29T15:31:06.573 回答
1

由于 Axiomatics 产品符合XACML 规范,因此默认情况下所有属性都假定包含多个值(称为“包”)。

因此,如果您想将字符串附加到属性,请使用属性的stringOneAndOnlyXACML 函数来指示该属性只能有一个值。

因此,假设您的意思是accessTo属性 ID 为Attributes.access_subject.subject_idinterestedId属性 ID 为Attributes.resource.resource_id并且anyOfAny_xacml1等效于anyOfAnyXACML 函数,结果条件如下所示,

anyOfAny(function[stringEqual], Attributes.access_subject.subject_id, stringOneAndOnly(Attributes.resource.resource_id) + "-edit")
于 2018-11-28T09:04:01.787 回答