0

以下是我的示例代码:https ://play.openpolicyagent.org/p/oyY1GOsYaf

在这里,当我尝试评估名称数组时,它显示: error occurred: 1:1: rego_unsafe_var_error: var names is unsafe

但是当我在允许规则定义之外定义相同的理解时:https ://play.openpolicyagent.org/p/Xv0cF7FM8b ,我能够评估选择

[
"smoke",
"dev"]

有人可以帮我指出区别吗?如果我想在规则中定义理解,我需要遵循什么语法吗?提前致谢

注意:在这两种情况下,我都得到了预期的最终输出,唯一的问题是名称数组评估。

4

1 回答 1

1

Rego Playground 在评估选择时生成查询的方式比人们想象的要简单得多。将从您选择的文本生成查询,而不考虑在文档中选择该文本的位置。这意味着即使您在规则正文中选择了一个局部变量,查询也将仅包含该变量名称(names在您的情况下为 );即使选择了规则局部变量,这也将被视为对文档正文中顶级变量的引用。这就是您的第一个示例返回错误的原因,因为文档中没有顶级变量names;而第二个样本确实如此,因此成功了。

hello您可以通过在此处选择和评估第 3 行的单词来测试这个怪癖: https ://play.openpolicyagent.org/p/n5OPoFnlhx 。

package play
    
# hello
    
hello {
    m := input.message
    m == "world"
}

即使它只是评论的一部分,它也会像您在第 5 行选择规则名称一样进行评估。

于 2022-01-19T18:06:54.713 回答