【问题标题】:OPA masking a dynamic array fieldOPA 屏蔽动态数组字段
【发布时间】:2021-11-14 11:34:44
【问题描述】:

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

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

输入:

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

【问题讨论】:

    标签: open-policy-agent rego


    【解决方案1】:

    如果您只想生成一个从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])
    }
    

    【讨论】:

    • 因此,为了利用屏蔽功能,我们可能必须再次迭代输入倍数。如果有一个时间敏感的应用程序或一个处理大量有效负载的应用程序,那么这让我想,在一个迭代输入以进行策略决策本身时包含屏蔽逻辑是否有效。这听起来合理吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多