OPA 屏蔽动态数组字段

OPA masking a dynamic array field

我正在尝试对作为数组一部分的输入和结果字段应用掩码。并且数组的大小是动态的。根据文档,指示提供绝对数组索引,这在此用例中是不可能的。我们还有其他选择吗?

例如。如果需要屏蔽输入文档中所有学生的年龄字段?

输入:

"students" : [
  {
    "name": "Student 1",
    "major": "Math",
    "age": "18"
  },
  {
    "name": "Student 2",
    "major": "Science",
    "age": "20"
  },
  {
    "name": "Student 3",
    "major": "Entrepreneurship",
    "age": "25"
  }
]

如果您只想生成从 input 中删除了一个字段(或一组字段)的 input 的副本,您可以使用 json.remove。诀窍是使用理解来计算要删除的路径列表。例如:

paths_to_remove := [sprintf("/students/%v/age", [x]) | some x; input.students[x]]
result := json.remove(input, paths_to_remove)

如果您尝试使用 Decision Log Masking 功能在决策日志中屏蔽 input 文档中的字段,那么您可以这样写:

package system.log

mask[x] {
    some i
    input.input.students[i]
    x := sprintf("/input/students/%v/age", [i])
}