【发布时间】:2021-04-13 09:43:07
【问题描述】:
在阅读了几次 Open Policy Agent 介绍文档之后,我在编写一条规则时遇到了麻烦,该规则断言对于集合中的每个元素,指定的对象都有一个关联的键。
这是我目前正在尝试的一个简化示例
https://play.openpolicyagent.org/p/oWBumjRkWX
package example
my_object = {
"lemon": ""
}
fruits = {
"orange",
"lemon",
"banana"
}
has_key(x, k) { _ = x[k] }
default has_lemon = false
has_lemon = has_key(my_object, "lemon") # this works as you'd expect
default all_fruits_have_entries_in_my_object = false
all_fruits_have_entries_in_my_object { # this is never false for some reason
some fruit
fruits[fruit]
has_key(my_object, fruit) # each fruit have a key in the my_object object
}
据我了解,fruits 不包含 "lemon" 元素时,has_lemon 应该为 false,并且我已经测试过它是否有效。但是,我还认为all_fruits_have_entries_in_my_object 规则应该在这里评估为false,因为my_object 缺少"orange" 和"banana" 的键。我在这里做傻事吗?
【问题讨论】: