【问题标题】:OPA conflicting policyOPA 冲突政策
【发布时间】:2020-06-17 22:21:00
【问题描述】:

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

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

【问题讨论】:

    标签: open-policy-agent rego


    【解决方案1】:

    当您有多个规则定义时,您表示的是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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2019-11-07
      • 2021-10-18
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多