在 rego 中将 { key: [values] } 转换为 {value: [keys]}

Transform { key: [values] } to {value: [keys]} in rego

请帮我在 rego 上写一个规则,returns 一个转换后的对象。

我的对象:

{
  "read": [
    "server1",
    "server2"
  ],
  "write": [
    "server2",
    "server3"
  ],
  "create": [
    "server1",
    "server2",
    "server3"
  ]
}

预计:

{
  "server1": [
    "read",
    "create"
  ],
  "server2": [
    "read",
    "write",
    "create"
  ],
  "server3": [
    "write",
    "create"
  ]
}

我知道我需要使用推导式,但我不明白如何使用

TLDR;您可以使用理解来执行分组操作。在这种情况下,您希望按服务器对操作进行分组。

operations_by_server := {server: operations | 
  server := input[_][_]
  operations := {op |
    some op
    server == input[op][_]
  }
}

这是一个互动版本:https://play.openpolicyagent.org/p/y5ldvjvmfK

有关理解的更多信息:https://www.openpolicyagent.org/docs/latest/policy-language/#comprehensions

附带说明一下,如果您想了解有关 Rego 的更多信息,请查看 this 在线课程。免责声明:我在制作该课程的公司工作。