opa rego 结果集表达式中的"位置"键是什么?是否可以在输入 JSON 中获取导致策略冲突的位置?



我使用的是go rego包和rego。编组后的结果集给出以下结果:

[
{
"expressions": [
{
"value": {...},
"text": "data",
"location": { "row": 1, "col": 1 }
}
]
}
]

我打算在Input JSON中输出密钥导致失败的位置,以便在构建错误的上下文中使用它我们之前使用JSON模式来验证JSON,它用于从输入中返回密钥,我们可以在映射时出错。https://www.jsonschemavalidator.net/

我想,由于rego可以支持更复杂的决策,其中不止一个键将负责做出最终结果,这可能是它不会指向失败输入上下文中的位置的原因。除非我错过了什么?

回答第一个问题:

OPA解析的每个值都保留"位置"信息,用于标识它在源字符串/文件中的来源。ResultSet中的位置是创建rego.Rego对象时传递的查询中表达式的位置。

在您的案例中,查询是"data",即您引用了OPA中的所有文档(既有可以从外部加载的基本文档,也有由您加载到OPA中任何规则生成的虚拟文档。(在这种情况下,表达式的位置不是很有趣:第1行,第1列。

回答您的第二个问题:

OPA目前没有可靠的方法来返回JSON值在输入中的位置,但这是有价值的,将来可能会添加。

最新更新