bog*_*ogg 2 go open-policy-agent rego
我按照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))
...
Run Code Online (Sandbox Code Playgroud)
如何添加外部数据 ( data.json) 以便我可以data.wantedName在 rego 策略中使用它来访问它?
我尝试通读 go 文档和示例,但找不到任何有用的信息。
谢谢!
您看过有关rego.Store()此示例的文档吗?
对于简单的情况,沿着这些思路的东西应该可以解决问题:
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))
Run Code Online (Sandbox Code Playgroud)
您可以实现自己的存储以用于更复杂的用途,但这会涉及更多内容。如果您可以将inmem.NewFromObject()商店喂入rego.New(),那么您应该首先尝试一下。