我已经写了一个示例rego代码。
default allow = false
allow {
some username
input.method = "GET"
input.path =["example", username]
input.user = username
}
allow {
some username
input.method = "GET"
input.path = ["example", username]
input.user != username
}当我尝试使用带参数的http://localhost:8181/v1/data/http/authz/allow API验证策略时
{
"input": {
"method": "GET",
"path": ["example", "sara"],
"user": "sara"
}
}和
{
"input": {
"method": "GET",
"path": ["example", "sara"],
"user": "notsara"
}
}返回:{"decision_id":"xxxxx","result":true}
这是预期的结果吗?如果存在冲突的策略,不应该出现错误吗?
发布于 2020-06-18 07:40:11
当一个规则有多个定义时,表示的是一个logical OR。因此,它们并不冲突;它们都经过评估,如果有任何规则匹配,您的结果就是肯定的。
当您尝试将同一规则定义为部分规则和完整规则时,会发生规则冲突:
allow {
some username
input.user = username
}
allow[id] {
some username
input.user != username
}1 error occurred: module.rego:3: rego_type_error: conflicting rules named allow found(这个例子不是很好,也没有什么意义,但我猜它只是一个例子)
https://stackoverflow.com/questions/62439289
复制相似问题