首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OPA冲突策略

OPA冲突策略
EN

Stack Overflow用户
提问于 2020-06-18 06:21:01
回答 1查看 342关注 0票数 0

我已经写了一个示例rego代码。

代码语言:javascript
复制
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验证策略时

代码语言:javascript
复制
{
    "input": {
    "method": "GET",
    "path": ["example", "sara"],
    "user": "sara"
    }
}

代码语言:javascript
复制
{
    "input": {
    "method": "GET",
    "path": ["example", "sara"],
    "user": "notsara"
    }
}

返回:{"decision_id":"xxxxx","result":true}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 07:40:11

当一个规则有多个定义时,表示的是一个logical OR。因此,它们并不冲突;它们都经过评估,如果有任何规则匹配,您的结果就是肯定的。

当您尝试将同一规则定义为部分规则和完整规则时,会发生规则冲突:

代码语言:javascript
复制
allow {
  some username
  input.user = username
}

allow[id] {
  some username
  input.user != username
}
代码语言:javascript
复制
1 error occurred: module.rego:3: rego_type_error: conflicting rules named allow found

(这个例子不是很好,也没有什么意义,但我猜它只是一个例子)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62439289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档