dbx12 / data-censor

一个在发布之前快速屏蔽数据结构和 JSON 文件的工具。

v1.0 2021-02-19 12:28 UTC

This package is auto-updated.

Last update: 2024-09-19 20:06:48 UTC


README

一个简单的屏蔽数据结构的工具。

动机

在记录软件时,你经常需要处理示例中使用的数据结构。可能是 API 响应或请求数据。这些数据通常包含敏感信息,如 API 令牌、用户名或其他个人信息。追踪这些条目是繁琐的,应该自动化,对吧?

用法

创建一个 \dbx12\jsonCensor\Censor 对象,对每个想要屏蔽的键调用 addRule(),最后将数据发送到 censor(),或者让 Censor 从文件中读取并写入另一个文件。

更详细的示例在 example.php

路径

路径描述了输入数据中的元素,有点像 CSS 选择器。每个路径必须以 . 开始并以属性名结束。在下面的示例 JSON 中,您将使用 .users.name 来引用包含 "john" 的字段。注意,用户列表中的索引是不指定的。在这些路径描述中没有数字索引。您可以使用数组指定多个路径,这些路径受相同规则的约束。使用 ['.users.name','.users.email'] 作为 addRule() 的第一个参数,并使用 ['role' => 'Admin'] 作为第二个参数将移除所有管理员的名字和电子邮件。

条件

条件定义了规则是否适用于该元素。您可以使用选定元素的同级元素来决定。您将条件定义为数组结构,键描述了字段,值描述了预期的值。您可以使用数组定义多个允许的值。可以检查多个键(必须全部匹配)。

假设我们在下面的示例中选择了 .users.name,并且想要在它属于客户或订阅者时移除它。规则将是:['role' => ['Customer','Subscriber']]

示例 JSON

{
  "users": [
    {
      "name": "john",
      "role": "Admin",
      "email": "john.doe@example.org",
      "moneySpent": 0
    },
    {
      "name": "jane",
      "role": "Customer",
      "email": "jane.doe@example.org",
      "moneySpent": 100
    },
    {
      "name": "alex",
      "role": "Subscriber",
      "email": "alex.doe@example.org",
      "moneySpent": 0
    }
  ],
  "purchases": [
    {
      "customerName": "jane",
      "items": {
        "apple": 5,
        "banana": 2
      }
    }
  ]
}

策略

策略定义了如何屏蔽值(或数组中的键和值)。所有策略都必须实现 CensorStrategyInterface。如果没有为规则指定策略,则使用 ConstantCensorStrategy。可以通过修改 Censor::$defaultStrategy 来更改此设置。

您可以通过定义自己的屏蔽策略轻松扩展此项目的功能。只需实现 \dbx12\jsonCensor\censorStrategies\CensorStrategyInterface 并提供您的屏蔽逻辑。

已知限制

该系统仅适用于标量值(例如字符串、整数)和数组(两者,数字和关联)。遇到其他内容(例如资源或对象实例)时的行为是未定义的,最有可能导致崩溃。