OPA 冲突政策

OPA conflicting policy

我写了一个示例 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}

这是预期的结果吗?如果存在冲突策略,难道不应该报错吗?

当您对一个规则有多个定义时,您就是在表达一个 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

(这个例子不是很好,也没有什么意义,但我想它可以作为一个例子)