authorization - 只需检查 ALFA 目标子句中是否存在
问题描述
我想写一个目标子句,上面写着“如果设置了某个属性(oneAndOnly),那么该策略适用”。我见过 [mustbepresent] 的东西,但是,它总是需要一个比较器(如==
)。
这是我的方法,但语法检查器抱怨......
policy reportPolicies {
target clause stringBagSize(my.company.person.doctor.id)==1
}
我见过你定义了一个字符串属性“resourceType”,但我不喜欢定义这样的元属性。我宁愿检查某些属性的存在。
解决方案
再次,很好的问题。是的,我经常使用人工属性,例如resourceType
并将其与值进行比较,例如medical record
或transaction
。您不必这样做,因为属性标识符本身传达了您正在处理一个或另一个的事实。但是,我确实认为这有助于政策更具可读性。
关于另一个问题:如何确保一个属性至少有一个值。在 Target 元素中,您可以使用mustBePresent
标签,但我不喜欢它。如果属性没有值,则 PDP 返回Indeterminate
并短路评估。
另一种方法是使用 >(大于)来比较属性。例如:
clause user.role > ""
clause user.age>0
这将强制定义值。
但是,更简洁的方法是在条件中使用包函数。例如
condition stringBagSize(user.role)>0 // True if the user has at least one role
推荐阅读
- java - No such file or directory - Exception in thread "main" java.io.FileNotFoundException
- postgresql - Select an object with different assignation in another column
- ios - Swift - 有没有办法触发程序断点在停止后继续
- arrays - What's the best way to count occurences of positive, negative, and 0 values in an unsorted array?
- ms-word - 如何为microsoft office 开发插件
- c# - 如何绑定到 WPF MVVM 中的上下文 MenuItem 标头?
- selenium - Jenkins - Timed out connecting to Chrome
- python - 为达到最大连接限制而引发的建议异常类型
- kubernetes - Reset / Rollback Kubernetes to just create state?
- c# - App Center push 在 Postman 中有效,但在我的 C# 应用程序中无效