cjmellor/blockade

允许用户模型阻止另一个用户模型

v1.2.0 2024-03-25 00:48 UTC

This package is auto-updated.

Last update: 2024-09-08 18:27:56 UTC


README

Packagist Version GitHub Tests Action Status Packagist Downloads Packagist PHP Version Laravel Version

允许一个用户阻止另一个用户。阻止用户将防止阻止者查看被阻止者的数据。

安装

您可以通过composer安装此包

composer require cjmellor/blockade

您可以使用以下命令发布并运行迁移

php artisan vendor:publish --tag="blockade-migrations"

php artisan migrate

并使用以下命令发布配置文件

php artisan vendor:publish --tag="blockade-config"

这是发布的配置文件内容

return [
    /**
     * If your User model different to the default, you can specify it here.
     */
    'user_model' => 'App\Models\User',
    
    /**
     * Specify the user model's foreign key.
     */
    'user_foreign_key' => 'user_id',

    /**
     * Specify the table name for the blocks table.
     */
    'blocks_table' => 'blocks',

    /**
     * Specify the foreign key for the blocker.
     */
    'blocker_foreign_key' => 'blocker_id',

    /**
     * Specify the foreign key for the blocked.
     */
    'blocked_foreign_key' => 'blocked_id',

    /**
     * Schedule the cleanup of expired blocks.
     */
    'schedule_cleanup' => false,
];

使用方法

使用特性

CanBlock

CanBlock特性添加到您的用户模型中。

此特性应该仅添加到您的用户模型中。

use Cjmellor\Blockade\Concerns\CanBlock;

class User
{
    use CanBlock;
    
    // ...
}

HasBlocked

在您不希望用户查看他们已阻止的用户模型的情况下,使用此特性。

例如:您有一个Comment模型,用户7阻止了用户8,因此用户7不应能够看到用户8发布的任何评论。

use Cjmellor\Blockade\Concerns\HasBlocked;

class Comment
{
    use HasBlocked;
    
    // ...
}

阻止用户

用户可以通过提供用户模型或仅提供要阻止的用户ID来阻止另一个用户。

$user->block(User::find(2)));

// or

$user->block(2);

注意:您不能阻止自己。

取消阻止用户

用户可以通过提供用户模型或仅提供要取消阻止的用户ID来取消阻止另一个用户。

$user->unblock(User::find(2)));

// or

$user->unblock(2);

检查是否已阻止用户

您可以运行检查以查看您是否已经阻止了一个用户。

$user->isBlocking(User::find(2)));

// or

$user->isBlocking(2);

设置阻止过期时间

在阻止用户时,您可以设置一个过期日期。在过期日期过后,用户将自动取消阻止。

$user->block(User::find(2), expiresAt: now()->addDays(7)));

此示例将阻止用户7天。7天后,用户将取消阻止。

⏱️ 计划过期阻止的清理

默认情况下,带有过期的阻止用户在过期时间后不会被视为过期。

如果您想自动删除过期的阻止,可以将config/blockade配置文件中的schedule_cleanup配置值设置为true

如果您想对清理运行时间有更多控制,有一个 artisan 命令可以运行以删除过期的阻止。

php artisan unblock:expired

您还可以计划此命令自动运行。

$schedule->command('unblock:expired')->everyMinute();

注意

别忘了将命令添加到App\Console\Kernel schedule()方法中。

事件

当用户被阻止时,会触发一个UserBlocked事件。

当用户被取消阻止时,会触发一个UserUnblocked事件。

被阻止或取消阻止的用户的User模型会被传递给事件,这样您就可以监听这些事件并执行进一步的操作。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

许可证

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