cjmellor / blockade
允许用户模型阻止另一个用户模型
Requires
- php: ^8.2|^8.3
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpunit/phpunit: ^10.0
- spatie/pest-plugin-test-time: ^2.0
README
允许一个用户阻止另一个用户。阻止用户将防止阻止者查看被阻止者的数据。
安装
您可以通过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)。有关更多信息,请参阅许可证文件。