如何组合多个规则的结果
How to I combine the results of multiple rules
我有 3 个角色,我正在尝试 return 用户可以根据分配的角色执行哪些操作。
游乐场:https://play.openpolicyagent.org/p/5gN7ObojXh
第一部分应该检查正在处理的对象是否在列表中,然后检查角色return是否有任何动作。
我是 OPA 和 Rego 的新手,当需要进行简单比较以外的任何事情时,我发现它非常令人困惑。
OPA 中的规则是 完整 或 部分。完整的规则是那些评估为单个值的规则,因此如果评估为不同的、冲突的值将失败——例如布尔“允许”规则不能同时为真 和 为假。
Partial rules either return sets or objects, and are built incrementally 通过评估每个具有相同名称的规则并将结果添加到规则生成的 set/object。
使用部分规则构建集合的示例策略可能如下所示:
package policy
import future.keywords.in
deny["Username found in deny list"] {
input.user.name in data.users.denylist
}
deny[msg] {
not "read" in input.user.roles
msg := sprintf("User %v missing role 'read'", [input.user.name])
}
deny["/admin endpoint requires 'admin' role"] {
input.request.path[0] == "admin"
not "admin" in input.user.roles
}
当使用如下输入进行评估时:
{
"input": {
"user": {
"name": "bob",
"roles": ["developer"]
},
"request": {
"path": ["admin", "users"]
}
}
}
拒绝规则可能评估为:
[
"User bob missing role 'read'",
"/admin endpoint requires 'admin' role"
]
您提供的示例策略可以重写为使用增量规则,如下所示:https://play.openpolicyagent.org/p/MYFFAVqMCu
如果您想了解更多信息,Styra Academy 是对 OPA 文档的重要补充资源。
我有 3 个角色,我正在尝试 return 用户可以根据分配的角色执行哪些操作。
游乐场:https://play.openpolicyagent.org/p/5gN7ObojXh
第一部分应该检查正在处理的对象是否在列表中,然后检查角色return是否有任何动作。
我是 OPA 和 Rego 的新手,当需要进行简单比较以外的任何事情时,我发现它非常令人困惑。
OPA 中的规则是 完整 或 部分。完整的规则是那些评估为单个值的规则,因此如果评估为不同的、冲突的值将失败——例如布尔“允许”规则不能同时为真 和 为假。
Partial rules either return sets or objects, and are built incrementally 通过评估每个具有相同名称的规则并将结果添加到规则生成的 set/object。
使用部分规则构建集合的示例策略可能如下所示:
package policy
import future.keywords.in
deny["Username found in deny list"] {
input.user.name in data.users.denylist
}
deny[msg] {
not "read" in input.user.roles
msg := sprintf("User %v missing role 'read'", [input.user.name])
}
deny["/admin endpoint requires 'admin' role"] {
input.request.path[0] == "admin"
not "admin" in input.user.roles
}
当使用如下输入进行评估时:
{
"input": {
"user": {
"name": "bob",
"roles": ["developer"]
},
"request": {
"path": ["admin", "users"]
}
}
}
拒绝规则可能评估为:
[
"User bob missing role 'read'",
"/admin endpoint requires 'admin' role"
]
您提供的示例策略可以重写为使用增量规则,如下所示:https://play.openpolicyagent.org/p/MYFFAVqMCu
如果您想了解更多信息,Styra Academy 是对 OPA 文档的重要补充资源。