只需检查ALFA目标子句中是否存在

时间:2018-05-25 18:12:32

标签: authorization abac alfa

我想要写一个目标子句,说"如果设置了某个属性(oneAndOnly),那么该策略适用"。我已经看到[必须存在]的东西,但它总是需要一个比较器(如==)。

这是我的approch,但语法检查器抱怨......

policy reportPolicies  {
        target  clause stringBagSize(my.company.person.doctor.id)==1        
}

我已经看到你定义了一个字符串属性" resourceType"但我不想定义这样的元属性。我更愿意检查是否存在某些属性。

1 个答案:

答案 0 :(得分:1)

同样,很棒的问题。是的我经常使用人工属性,例如resourceType并将其与值进行比较,例如medical recordtransaction。您不必这样做,因为属性标识符本身传达了您正在处理的问题。但是,我认为这有助于使政策更具可读性。

关于另一个问题:如何确保属性至少有一个值。在Tar​​get元素中,您可以使用mustBePresent标记,但我不喜欢它。如果该属性没有值,则PDP返回Indeterminate并将其短路评估。

另一种方法是使用>比较属性。 (比...更棒)。例如:

  • clause user.role > ""
  • clause user.age>0

这会强制定义值。

但是,更简洁的方法是在条件中使用行包功能。例如

condition stringBagSize(user.role)>0 // True if the user has at least one role