romanzipp/laravel-previously-deleted

存储已删除的模型属性

1.6.0 2024-03-19 08:31 UTC

This package is auto-updated.

Last update: 2024-09-19 09:28:02 UTC


README

Latest Stable Version Total Downloads License GitHub Build Status

此包在删除模型之前存储所选属性。

为什么?

如果用户请求删除其用户数据,您需要部分删除与用户相关的所有数据(GDPR)。使用此包,您可以存储某些属性和值,例如阻止以前注册的用户名或电子邮件地址。

安装

composer require romanzipp/laravel-previously-deleted

如果您使用 Laravel 5.5+,则已完成,否则继续

romanzipp\PreviouslyDeleted\Providers\PreviouslyDeletedProvider::class,

将服务提供者添加到您的 app.php 配置文件

配置

将配置复制到配置文件夹

$ php artisan vendor:publish --provider="romanzipp\PreviouslyDeleted\Providers\PreviouslyDeletedProvider"

运行迁移

$ php artisan migrate

用法

此示例展示了与用户模型和存储的 "username" 和 "email" 属性一起使用的情况。

添加模型特质

use romanzipp\PreviouslyDeleted\Traits\SavePreviouslyDeleted;

class User extends Model
{
    use SavePreviouslyDeleted;

    protected $storeDeleted = [
        'username',
        'email',
    ];
}

添加验证规则

验证规则需要两个参数: not_deleted:{table}[,{attribute}]

  • table:查询的表名。在此示例中: users
  • attribute:模型属性。如果没有给出,则使用输入名称。
public function store(Request $request)
{
    $request->validate([
        'name' => ['required', 'not_deleted:users,username'],
        'email' => ['required', 'not_deleted:users'],
        'password' => ['required', 'min:6']
    ]);

    User::create([
        'username' => $request->input('name'),
        'email' => $request->input('email'),
        'password' => bcrypt($request->input('password')),
    ]);
}

您也可以使用规则实例

use romanzipp\PreviouslyDeleted\Rules\NotPreviouslyDeleted;

$request->validate([
    'name' => ['required', new NotPreviouslyDeleted(User::class, 'username')],
    'email' => ['required', new NotPreviouslyDeleted(User::class)],
    'password' => ['required', 'min:6']
]);

扩展用法

存储哈希值

当存储个人信息时,您应该创建哈希值以尊重用户的隐私。

存储纯文本值

protected $storeDeleted = [
    'username',
    'email',
];

根据 GDPR (DSGVO),用户有权请求删除所有个人信息的完整删除,包括电子邮件地址、用户名等。如果受此影响,您应该使用哈希算法来防止任何隐私损害。

存储哈希值

protected $storeDeleted = [
    'username' => 'sha1',
    'email' => 'md5',
];

存储软删除

默认情况下,该包仅在模型被强制删除时存储属性。

要启用即使在软删除中存储属性,请将 ignore_soft_deleted 配置值设置为 false

return [
    'ignore_soft_deleted' => false,
];

测试

./vendor/bin/phpunit