首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OPA (Rego) as Go lib:如何应用外部数据?

OPA (Rego) as Go lib:如何应用外部数据?
EN

Stack Overflow用户
提问于 2021-10-08 07:18:12
回答 1查看 400关注 0票数 1

我效仿了https://www.openpolicyagent.org/docs/latest/#5-try-opa-as-a-go-library的例子。重要代码片段:

代码语言:javascript
复制
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文档和示例,但我找不到任何有用的信息。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-10-08 07:50:06

您看过rego.Store()this example上的文档了吗

在简单的情况下,下面的内容应该能起到作用:

代码语言:javascript
复制
    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()商店,你应该先试一试。

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

https://stackoverflow.com/questions/69491963

复制
相关文章

相似问题

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