clntdev/scrubber

一个用于从数据库定义字段中清除数据的PHP包

2.0.0 2023-06-19 23:15 UTC

This package is auto-updated.

Last update: 2024-09-20 02:30:20 UTC


README

Stable Build CI Status

Scrubber是一个仅有一个依赖的最小PHP包,它允许你定义一个PHP配置文件,这有助于使用预定义或随机值更新数据库字段。

当你需要一个生产数据库的副本进行工作并需要删除敏感内容时,这非常完美。

安装

通过运行以下命令安装composer: composer require clntdev/scrubber

用法

配置文件

此包依赖于一个有效的PHP配置文件以正确运行,该文件返回一个简单的数组,该数组映射了表、字段及其详细信息,以便它知道要使用哪个处理器。

处理器是从字段的给定值中检测到的。

  • 如果希望使用替代列获取数据库记录,则字段可以定义primary_key,默认为id
  • 如果希望覆盖检测到的处理器,则字段可以定义handler
  • 字段可以定义type,这可以用来定义字段为特定数据类型,如pid(这对于GDPR目的很有用)(这在以下列出的方法中很有用)。

以下是一个用于单元测试的示例配置

<?php

use ClntDev\Scrubber\Handlers\FakerHandler;

return [
    'users' => [
        'first_name' => [
            'primary_key' => 'id',
            'value' => 'faker.firstName',
            'type' => 'pid',
        ],
        'last_name' => [
            'value' => 'faker.lastName',
            'type' => 'pid',
        ],
        'email' => [
            'value' => 'faker.email',
            'handler' => FakerHandler::class,
            'type' => 'pid',
        ],
        'toggle' => [
            'value' => static fn (): bool => true,
        ],
    ],
    'composite_table' => [
        'composite_field' => [
            'primary_key' => ['entity_id', 'deleted', 'delta', 'langcode'],
            'value' => 'string handler',
        ],
    ],
];

接口

此包实现了两个接口,需要创建类来实现这些接口,然后这些接口将被传递到主Scrubber类中并使用。

数据库类

此类应实现ClntDev\Scrubber\Contracts\DatabaseUpdate接口,该接口需要定义updatefetch方法。

定义fetch方法以返回一个值数组,例如ID,使用给定的$table$primaryKey变量从选择的数据源中获取它们。

定义update方法以使用给定的$table$field$value参数更新选择的数据源。

日志类

此类应实现ClntDev\Scrubber\Contracts\Logger接口,该接口需要定义log方法。

定义log方法以记录在过程中抛出的任何异常消息到你的首选日志方法。

Scrubber类

一旦定义了配置文件并设置了上述类,现在要做的就是初始化Scrubber类。这将允许运行数据库更新,并根据给定的类型列出字段。

ClntDev\Scrubber\Scrubber类可以正常newed或提供一个静态的make方法以使链调用更整洁。

$scrubber = Scrubber::make('/path/to/config.php', $databaseClass, $loggerClass)

传入配置文件的绝对路径、创建的数据库类和创建的日志类。

方法

run() - 这是主要方法,将运行解析配置文件中的所有处理器,修改数据库。

getFieldList(string $type = 'pid') - 此方法将返回给定类型的字段数组,默认为pid

getFieldListAsString(string $type = 'pid') - 此方法将返回给定类型的字段逗号分隔字符串,默认为pid

内置处理器

  • Faker - 使用 fakerphp/faker 库通过值输入(如 faker.firstName)随机生成字符串
  • 可调用 - 传递闭包或可调用类
  • 对象 - 传递一个具有 handle__invoke 方法的对象
  • 整数 - 如果是数值,将值输入转换为整数
  • 字符串 - 将值输入转换为字符串