公理学-条件编辑器

时间:2018-11-27 23:23:25

标签: authorization access-control xacml abac alfa

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

之类的资源

现在我要写一个条件-它检查与“ -Access”中的“ -edit”串联的“ interestedId”等于“ AccessTo”中的“ 123-edit”。

我正在尝试编写这样的规则

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

不允许这样做。

感谢您的帮助。

2 个答案:

答案 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_idinterestedId的属性ID为Attributes.resource.resource_id,而anyOfAny_xacml1等效于{{1} } XACML函数,结果条件看起来像是

anyOfAny