0

我写了一个示例 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","re​​sult":true}

这是预期的结果吗?如果存在冲突的策略,不应该出现错误吗?

4

1 回答 1

0

当您有多个规则定义时,您正在表达一个逻辑 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

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

于 2020-06-17T23:40:10.653 回答