sfolar/laravel-locked

此包为Eloquent模型添加锁定功能

0.5.1 2023-02-14 17:56 UTC

This package is auto-updated.

Last update: 2024-09-08 05:13:59 UTC


README

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

Laravel Locked

为Eloquent模型添加锁定功能的包。

安装

您可以通过composer安装此包

composer require sfolador/laravel-locked

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

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

这是发布配置文件的内容

return [
   'locking_column' => 'locked_at',
   
    'default_namespace' => 'App\Models',

    'unlock_allowed' => true,
    'can_be_unlocked' => [
    ],
    
    'prevent_modifications_on_locked_objects' => false,
];

您可以通过更改locking_column的值来选择锁定列的其他默认列名。使用default_namespace值自动将命名空间添加到命令传递给模型的参数中。有关更多详细信息,请参阅使用部分。

unlock_allowed值用于启用或禁用unlock命令。如果将其设置为false,则unlock方法将引发异常。您可以通过设置can_be_unlocked数组来添加可以解锁的模型的白名单。如果数组为空且unlock_allowed值为false,则无法解锁任何模型。

prevent_modifications_on_locked_objects值用于禁止对锁定模型进行修改。如果将其设置为true,则尝试保存/删除/复制一个锁定模型时将引发异常。

命令

有一个Artisan命令用于为类创建迁移,运行以下命令:

php artisan lock-add {classname} {--namespace=}

例如,如果您想向User模型添加一个锁定列,您可以运行以下命令:

php artisan lock-add User

这将创建一个迁移文件在database/migrations文件夹中,然后您可以运行迁移:

php artisan migrate

该命令接受一个可选的--namespace参数,用于指定类的命名空间,例如:

php artisan lock-add User --namespace=App\Models\SomeFolder

命令的默认命名空间为App\Models,但您可以通过修改配置文件中的default_namespace值来更改它。

使用方法

创建迁移后,您可以在模型中使用Lockable特性。

use Sfolador\Locked\Traits\HasLocks;

class User extends Model
{
    use HasLocks;
}

此特性将为您的模型添加以下方法:

  • lock():通过将锁定列设置为当前日期来添加对模型的锁定
  • unlock():通过将锁定列设置为null来移除锁定
  • isLocked():如果模型被锁定则返回true,否则返回false
  • isUnlocked():如果模型被解锁则返回true,否则返回false
  • isNotUnlocked():如果模型未被解锁则返回true,否则返回false
  • isNotLocked():如果模型未被锁定则返回true,否则返回false
  • toggleLock():切换模型的锁定状态

示例

$user = User::find(1);
$user->lock();

//...

if ($user->isNotLocked()) {
   UserManager::update($user);
}

待办事项

  • 添加一个选项以禁止在模型已锁定的情况下锁定模型并引发异常
  • 添加一个选项以在模型被锁定时阻止对模型的通知
  • 添加锁定/解锁操作的日志记录,以便进行审计
  • 添加一个选项以在模型被锁定时阻止保存模型

测试

composer test

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

致谢

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。