sfolar / laravel-locked
此包为Eloquent模型添加锁定功能
0.5.1
2023-02-14 17:56 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0|^10
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- doctrine/dbal: ^3.5
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0|^8.0
- pestphp/pest: ^1.21|^2.0
- pestphp/pest-plugin-laravel: ^1.1|^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5|^10.0
- spatie/pest-plugin-test-time: ^1.1
README
为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,否则返回falseisUnlocked()
:如果模型被解锁则返回true,否则返回falseisNotUnlocked()
:如果模型未被解锁则返回true,否则返回falseisNotLocked()
:如果模型未被锁定则返回true,否则返回falsetoggleLock()
:切换模型的锁定状态
示例
$user = User::find(1); $user->lock(); //... if ($user->isNotLocked()) { UserManager::update($user); }
待办事项
- 添加一个选项以禁止在模型已锁定的情况下锁定模型并引发异常
- 添加一个选项以在模型被锁定时阻止对模型的通知
- 添加锁定/解锁操作的日志记录,以便进行审计
- 添加一个选项以在模型被锁定时阻止保存模型
测试
composer test
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
致谢
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。