dbx12 / data-censor
一个在发布之前快速屏蔽数据结构和 JSON 文件的工具。
Requires
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.5.2
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
并提供您的屏蔽逻辑。
已知限制
该系统仅适用于标量值(例如字符串、整数)和数组(两者,数字和关联)。遇到其他内容(例如资源或对象实例)时的行为是未定义的,最有可能导致崩溃。