我效仿了https://www.openpolicyagent.org/docs/latest/#5-try-opa-as-a-go-library的例子。重要代码片段:
r := rego.New(
rego.Query("x = data.example.allow"),
rego.Load([]string{"./example.rego"}, nil)
...
rs, err := query.Eval(ctx, rego.EvalInput(input))
...如何添加外部数据(data.json)以便可以使用,例如,在rego策略中的data.wantedName来访问它?
我试着通读了go文档和示例,但我找不到任何有用的信息。
谢谢!
发布于 2021-10-08 07:50:06
您看过rego.Store()和this example上的文档了吗
在简单的情况下,下面的内容应该能起到作用:
data := `{
"example": {
"users": [
{
"name": "alice",
"likes": ["dogs", "clouds"]
},
{
"name": "bob",
"likes": ["pizza", "cats"]
}
]
}
}`
var json map[string]interface{}
err := util.UnmarshalJSON([]byte(data), &json)
if err != nil {
// Handle error.
}
store := inmem.NewFromObject(json)
// Create new query that returns the value
rego := rego.New(
rego.Query("data.example.users[0].likes"),
rego.Store(store))您可以为更复杂的用途实现自己的存储,但这将涉及更多内容。如果你在rego.New()中加入了inmem.NewFromObject()商店,你应该先试一试。
https://stackoverflow.com/questions/69491963
复制相似问题