lowerrocklabs / laravel-lockable

Laravel Lockable 提供了特性,允许模型被锁定

1.21 2022-10-08 04:37 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此模型允许按需锁定模型。您可以将它与您选择的权限方法集成,或者将其独立使用。此包允许您确定模型实例是否已锁定或未锁定。或者,它将独立防止更新模型实例。

安装

需要 [PHP 7.3+ 或 8.0+] 和 [Laravel 8.x 或 9.x] (https://laravel.net.cn/docs/8.x/releaseshttps://laravel.net.cn/docs/9.x/releases)

您可以通过 composer 安装此包

composer require lowerrocklabs/laravel-lockable

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

php artisan vendor:publish --tag="laravel-lockable-migrations"
php artisan migrate

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

php artisan vendor:publish --tag="laravel-lockable-config"

这是已发布的配置文件的内容,它控制全局锁定持续时间,这可以在每个模型级别上进行自定义(见下文)。

return [
    // Name of the Table containing the locks
    'locks_table' => 'model_locks',
    
     // Name of the Table containing the lock watchers
    'lock_watchers_table' => 'model_lock_watchers',
    
    // Enable retrieval of lock status on retrieving a model
    'get_locked_on_retrieve' => true,
    
    // Prevent updating if a model is locked by another user
    'prevent_updating' => true,

    // Time in Seconds For Lock To Persist
    'duration' => '3600',
];

用法

模型配置

在您希望可锁定的模型中,添加 IsLockable 特性

use LowerRockLabs\Lockable\Traits\IsLockable;

然后设置特性

use IsLockable;

在您的组件/控制器中

然后使用 acquireLock 函数尝试锁定模型,如果有现有的锁定,它将返回 false。

acquireLock()

您可以在 acquireLock() 函数之前调用 releaseLock() 函数来覆盖现有的锁定,如果您正在使用基于权限的方法,建议您将其限制为适当的用户。

releaseLock()

您可以通过以下方式确定是否存在锁定,如果不存在,它将获取锁定。

isLocked()

您可以使用以下命令向持有锁的用户发送广播

requestLock()

锁定持续时间

您可以通过在您的模型中设置以下内容来覆盖默认的锁定持续时间(以秒为单位),该持续时间从配置中获取,但可以在每个模型级别上进行自定义。例如,以下内容将锁定持续时间限制为 600 秒。

public $modelLockDuration = "600";

当持续时间过期或尝试访问模型时,锁定将清除,或者您可以调用以下命令之一,或者将它们添加到计划中(根据您的需要)。

命令

清除过期锁定

php artisan locks:flushexpired

清除所有锁定

php artisan locks:flushall

事件

在锁定过程中将触发两个事件,如果需要,可以使用它们来触发通知或记录 模型锁定时

LowerRockLabs\Lockable\Events\ModelWasLocked;

模型解锁时

LowerRockLabs\Lockable\Events\ModelWasUnLocked;

当用户请求释放锁时,将触发一个附加事件 模型解锁时

LowerRockLabs\Lockable\Events\ModelUnlockRequested;

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可协议

MIT 许可协议 (MIT)。请参阅 许可文件 了解更多信息。