首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rego_type_error:未定义函数

rego_type_error:未定义函数
EN

Stack Overflow用户
提问于 2021-01-24 12:26:00
回答 1查看 1.4K关注 0票数 3

我对OPA和rego文件很陌生。我创建了这样一个rego文件:

代码语言:javascript
复制
package sample.access
import data.myaccess

default allow = false
allow = true {
    myaccess.is_user_allowed(input.user)
}

此外,我还创建了这样的测试rego文件:

代码语言:javascript
复制
package sample.access

test_allow_positive{
    allow with input as {
        "user": "user1"
    } with data.myaccess as {
        {
            {"user": "user1"},
            {"user": "user2"}
        }
            
    }
}

当我运行这个测试用例时,我得到的错误类似于"rego_type_error:未定义函数rego_type_error“帮我解决这个问题。谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-05-11 19:32:52

我想这就是你想要做的:

创建一个规则,allow,如果input.user来自一组在调用时传递的用户,则返回input.user。要做到这一点,您可以使用以下规则:

代码语言:javascript
复制
package sample.access

allow {
    data.allowed[input.user]
}

相应的单元测试:

代码语言:javascript
复制
package sample.access

test_allow {
    allow with input as {
        "user": "user1"
    } with data.allowed as {"user1", "user2"}
}

test_deny {
    not allow with input as {
        "user": "user3"
    } with data.allowed as {"user1", "user2"}
}

请注意,不需要显式导入将在运行时传递的参数。

如果需要以{"user": "id"}列表的形式输入数据,则应该使用集合理解

代码语言:javascript
复制
package sample.access

allow {
    is_user_allowed = {user | user = data.allowed[_].user}

    is_user_allowed[input.user]
}

然后,您的单元测试需要修改如下:

代码语言:javascript
复制
package sample.access

test_allow {
    allow with input as {
        "user": "user1"
    } with data.allowed as {
        {"user": "user1"},
        {"user": "user2"}
    }
}

test_deny {
    not allow with input as {
        "user": "user3"
    } with data.allowed as {
         {"user": "user1"},
         {"user": "user2"}
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65870501

复制
相关文章

相似问题

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