mtownsend/array-redactor

一个PHP包,可以通过键来编辑数组值。

1.0.1 2019-06-07 18:34 UTC

This package is auto-updated.

Last update: 2024-09-19 04:02:57 UTC


README

一个PHP包,无论数组嵌套多深,都可以通过键来编辑数组的值。

为什么?

您是否曾经构建或交互过API,并需要记录所有出站和入站调用?很可能会在这个过程中有一个通过应用程序或代表用户进行的身份验证。日志对调试很有用,但存储敏感信息,如密码或API密钥,不是您希望在日志中供任何人查看的内容。这个用例不仅限于这个例子,但正是这个例子促使我创建ArrayRedactor包。

无论您的使用需求是什么,这个包旨在提供一个简单、轻量级的方式来编辑数组中的敏感信息,无论它嵌套多深。

安装

通过composer安装

composer require mtownsend/array-redactor

此包旨在与任何PHP 5.6+应用程序一起使用,但特别支持Laravel的Facade。

注册服务提供者(Laravel用户)

对于Laravel 5.4及以下版本,将以下行添加到您的config/app.php

/*
 * Package Service Providers...
 */
Mtownsend\ArrayRedactor\Providers\ArrayRedactorServiceProvider::class,

对于Laravel 5.5及更高版本,包将自动为您注册提供者。

使用Lumen

要注册服务提供者,将以下行添加到app/bootstrap/app.php

$app->register(Mtownsend\ArrayRedactor\Providers\ArrayRedactorServiceProvider::class);

发布配置文件(Laravel用户)

php artisan vendor:publish --provider="Mtownsend\ArrayRedactor\Providers\ArrayRedactorServiceProvider"

一旦您的arrayredactor.php已发布到您的配置文件夹,您将看到一个包含2个键的文件:keysink。您可以替换这些值,但请注意:**这些值仅在您使用Laravel Facade时才生效**。

快速入门

使用类

use Mtownsend\ArrayRedactor\ArrayRedactor;

// An example array, maybe a request being made to/from an API application you wish to log in your database
$login = [
    'email' => 'john_doe@domain.com',
    'password' => 'secret123',
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
];

$redactor = (new ArrayRedactor($login, ['password', 'session_id']))->redact();

// $redactor will return:
[
    'email' => 'john_doe@domain.com',
    'password' => '[REDACTED]',
    'data' => [
        'session_id' => '[REDACTED]'
    ],
];

高级使用

Array Redactor也可以接收有效的JSON而不是内容数组。

$json = json_encode([
    'email' => 'john_doe@domain.com',
    'password' => 'secret123',
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
]);

$redactor = (new ArrayRedactor($json, ['password', 'session_id']))->redact();

// $redactor will return:
[
    'email' => 'john_doe@domain.com',
    'password' => '[REDACTED]',
    'data' => [
        'session_id' => '[REDACTED]'
    ],
];

您也可以将内容以JSON而不是数组的形式返回。

$login = [
    'email' => 'john_doe@domain.com',
    'password' => 'secret123',
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
];

$redactor = (new ArrayRedactor($login, ['password', 'session_id']))->redactToJson();

// $redactor will return:
"{
	"email": "john_doe@domain.com",
	"password": "[REDACTED]",
	"data": {
		"session_id": "[REDACTED]"
	}
}"

您可以通过构造函数的第三个参数或使用专门的->ink()方法来更改编辑值(默认值:[REDACTED],称为ink)。

$login = [
    'email' => 'john_doe@domain.com',
    'password' => 'secret123',
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
];

$redactor = (new ArrayRedactor($login, ['password', 'session_id'], null))->redact();
// or...
$redactor = (new ArrayRedactor($login, ['password', 'session_id']))->ink(null)->redact();

// $redactor will return:
[
    'email' => 'john_doe@domain.com',
    'password' => null,
    'data' => [
        'session_id' => null
    ],
];

您可以将ArrayRedactor作为函数调用,并且神奇的__invoke()方法将为您调用redact方法。

$login = [
    'email' => 'john_doe@domain.com',
    'password' => 'secret123',
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
];

$redactor = (new ArrayRedactor($login, ['password', 'session_id'], null))();

// $redactor will return:
[
    'email' => 'john_doe@domain.com',
    'password' => null,
    'data' => [
        'session_id' => null
    ],
];

最后,如果您愿意,可以完全省略构造函数参数。

$login = [
    'email' => 'john_doe@domain.com',
    'password' => 'secret123',
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
];

$redactor = (new ArrayRedactor)->content($login)->keys(['password'])->ink(null)->redact();

// $redactor will return:
[
    'email' => 'john_doe@domain.com',
    'password' => null,
    'data' => [
        'session_id' => 'z481jf0an4kasnc8a84aj831'
    ],
];

使用全局辅助函数

此包提供了一个便捷的全局可访问的辅助函数。

array_redactor($array, $keys, $ink)->redact();
// or...
array_redactor()->content($array)->keys(['current_password', 'new_password'])->ink('████████')->redact();

使用外观(Laravel用户)

如果您正在使用Laravel,此包提供了一个外观。要将外观注册到您的config/app.php中的aliases键下,请添加以下行。

请注意:这是Laravel用户唯一的方法,可以从您的arrayredactor.php配置文件中预填充您的keysink。全局辅助函数和类的直接实例化不会为您预填充这些值。

'ArrayRedactor' => Mtownsend\ArrayRedactor\Facades\ArrayRedactor::class,
use ArrayRedactor;

// Laravel prefills our keys() and ink() methods for us from the config file
ArrayRedactor::content($array)->redact();

错误处理

如果在传递内容时传递了无效的JSON或数组,将抛出ArrayRedactorException

try {
    $redactor = (new ArrayRedactor('i am an invalid argument', ['password']))->redact();
} catch (\Mtownsend\ArrayRedactor\Exceptions\ArrayRedactorException $exception) {
    // do something...
}

致谢

测试

您可以使用以下命令运行测试

./vendor/bin/phpunit

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件