只需检查 ALFA 目标子句中是否存在
Just check for existence in ALFA target clause
我想写一个 "If a certain attribute is set (oneAndOnly), then the policy applies" 的目标子句。我已经看到了 [mustbepresent] 的东西,但是,它总是需要一个比较器(比如 ==
)。
这是我的方法,但语法检查器抱怨...
policy reportPolicies {
target clause stringBagSize(my.company.person.doctor.id)==1
}
我看到您定义了一个字符串属性 "resourceType" 但我不喜欢定义这样的元属性。我宁愿检查某些属性是否存在。
再一次,很好的问题。是的,我经常使用 artificial 属性,例如resourceType
并将其与值进行比较,例如medical record
或 transaction
。您不必这样做,因为属性标识符本身传达了您正在处理一个或另一个的事实。但是,我确实认为它有助于提高政策的可读性。
关于另一个问题:如何确保一个属性至少有一个值。在 Target 元素中,您可以使用 mustBePresent
标记,但我不喜欢它。如果该属性没有值,则 PDP returns Indeterminate
和短路评估。
另一种方法是使用 >(大于)比较属性。例如:
clause user.role > ""
clause user.age>0
这将强制定义值。
不过,更简洁的方法是在条件内使用包函数。例如
condition stringBagSize(user.role)>0 // True if the user has at least one role
我想写一个 "If a certain attribute is set (oneAndOnly), then the policy applies" 的目标子句。我已经看到了 [mustbepresent] 的东西,但是,它总是需要一个比较器(比如 ==
)。
这是我的方法,但语法检查器抱怨...
policy reportPolicies {
target clause stringBagSize(my.company.person.doctor.id)==1
}
我看到您定义了一个字符串属性 "resourceType" 但我不喜欢定义这样的元属性。我宁愿检查某些属性是否存在。
再一次,很好的问题。是的,我经常使用 artificial 属性,例如resourceType
并将其与值进行比较,例如medical record
或 transaction
。您不必这样做,因为属性标识符本身传达了您正在处理一个或另一个的事实。但是,我确实认为它有助于提高政策的可读性。
关于另一个问题:如何确保一个属性至少有一个值。在 Target 元素中,您可以使用 mustBePresent
标记,但我不喜欢它。如果该属性没有值,则 PDP returns Indeterminate
和短路评估。
另一种方法是使用 >(大于)比较属性。例如:
clause user.role > ""
clause user.age>0
这将强制定义值。
不过,更简洁的方法是在条件内使用包函数。例如
condition stringBagSize(user.role)>0 // True if the user has at least one role