kenepa / resource-lock
丝束资源锁定是Filament插件,为您的网站添加资源锁定功能。
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/contracts: ^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.0|^8.1
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0|^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-livewire: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
- tightenco/duster: ^1.1
README

丝束资源锁定是Filament插件,为您的网站添加资源锁定功能。当用户开始编辑资源时,丝束资源锁定会自动锁定资源,防止其他用户同时编辑。在设定时间内或在用户保存或放弃更改后,资源将自动解锁。
安装
注意 - 升级到2.1.x版本
如果您已发布配置,请确保更新以下配置'resource' => [ 'class' => \Kenepa\ResourceLock\Resources\LockResource::class, ],
您可以通过composer安装该软件包
composer require kenepa/resource-lock
然后运行安装命令以发布和运行迁移
php artisan resource-lock:install
使用面板注册插件
use Kenepa\ResourceLock\ResourceLockPlugin; use Filament\Panel; public function panel(Panel $panel): Panel { return $panel // ... ->plugin(ResourceLockPlugin::make()); }
您可以发布运行配置(可选)
php artisan vendor:publish --tag=resource-lock-config
使用方法
Filament资源锁定软件包使您能够锁定资源并防止其他用户同时编辑。目前,此软件包仅锁定编辑编辑记录页面和编辑简单模态资源时的编辑模态。按照以下步骤将锁定添加到您的资源中。
为您的模型添加锁定
第一步是将HasLocks特性添加到您资源的模型中。HasLocks特性在您的模型上启用了锁定功能。
// Post.php use Kenepa\ResourceLock\Models\Concerns\HasLocks; class Post extends Model { use HasFactory; use HasLocks; protected $table = 'posts'; protected $guarded = []; }
为您的编辑记录页面添加锁定
第二步是将UsesResourceLock特性添加到您的编辑记录页面。UsesResourceLock特性在您的编辑页面上启用了锁定功能。
// EditPost.php use Kenepa\ResourceLock\Resources\Pages\Concerns\UsesResourceLock; class EditPost extends EditRecord { use UsesResourceLock; protected static string $resource = PostResource::class; }
简单模态资源
如果您的资源是简单模态资源,您需要使用UsesSimpleResourceLock特性。
// ManagePosts.php use Kenepa\ResourceLock\Resources\Pages\Concerns\UsesSimpleResourceLock; class ManagePosts extends ManageRecords { use UsesSimpleResourceLock; protected static string $resource = PostResource::class; }
就这样!您的资源现在可以锁定。请参阅以下文档以获取有关如何配置锁定功能的更多信息。
资源锁定管理器
该软件包还提供了一种简单的方法来管理和查看您的应用程序中所有活动过期锁定。它还提供了一种快速解锁所有资源或特定锁定的方法。
配置
访问
您可以通过调整访问变量来限制对“解锁”按钮或资源管理器的访问。启用“limited”键并将其设置为true,允许您指定Laravel Gate类或来自Spatie Permissions软件包的权限名称。
// resource-lock.php /* |-------------------------------------------------------------------------- | Resource Unlocker |-------------------------------------------------------------------------- | | The unlocker configuration specifies whether limited access is enabled for | the resource lock feature. If limited access is enabled, only specific | users or roles will be able to unlock locked resources. | */ 'unlocker' => [ 'limited_access' => true, 'gate' => 'unlock' ],
示例
// Example using gates // More info about gates: https://laravel.net.cn/docs/authorization#writing-gates Gate::define('unlock', function (User $user, Post $post) { return $user->email === 'admin@mail.com'; }); // Example using spatie permission package Permission::create(['name' => 'unlock']);
使用自定义模型
有时,您可能需要在应用程序中对User模型有自定义实现,或者您可能想为ResourceLock功能使用自定义类。在这种情况下,您可以将配置文件更新为指定您想要使用的新类。这将确保ResourceLock功能与新实现一起正常工作。
// resource-lock.php /* |-------------------------------------------------------------------------- | Models |-------------------------------------------------------------------------- | | The models configuration specifies the classes that represent your application's | data objects. This configuration is used by the framework to interact with | the application's data models. You can even implement your own ResourceLock model. | */ 'models' => [ 'User' => \App\Models\CustomUser::class, 'ResourceLock' => \App\Models\CustomResourceLock::class, ],
显示锁定资源的用户
使用display_resource_lock_owner
在resource-lock.php
配置中控制是否在模态中显示锁定资源所有者。将选项设置为true
以显示所有者的用户名或其他标识信息。模态可以通过按钮点击或当资源被访问时自动触发。
默认情况下,该包显示用户名称:$userModel->name
。但是,如果你的用户模型没有名称或你想显示不同的标识符,你可以创建一个自定义操作来覆盖默认行为。
该包使用操作,允许你实现自己的自定义逻辑。动作类不过是一个简单的类,其中包含一个执行某些逻辑的方法。了解更多关于操作的信息
要创建自定义操作,首先在你的项目中创建一个名为 CustomGetResourceLockOwnerAction.php
的文件,例如。在这个文件中,创建一个新的类,它扩展了 GetResourceLockOwnerAction
类,并重写执行方法以返回所需的标识符。例如
// CustomGetResourceLockOwnerAction.php namespace App\Actions; use Kenepa\ResourceLock\Actions\GetResourceLockOwnerAction; class CustomResourceLockOwnerAction extends GetResourceLockOwnerAction { public function execute($userModel): string|null { return $userModel->email; } }
接下来,在 resource-lock.config 文件中注册你的自定义操作。将默认的 get_resource_lock_owner_action 值替换为你的自定义操作的类名。例如
// resource-lock.php 'actions' => [ - 'get_resource_lock_owner_action' => \Kenepa\ResourceLock\Actions\GetResourceLockOwnerAction::class + 'get_resource_lock_owner_action' => \Kenepa\ResourceLock\Actions\CustomGetResourceLockOwnerAction::class ],
覆盖默认功能
如果你需要超出特质提供的一些自定义功能,你可以覆盖它们使用的函数。例如,如果你想更改“返回”按钮重定向到的URL,你可以覆盖 resourceLockReturnUrl() 函数。默认情况下,此按钮将带你到资源的索引页面,但你可以在 resourceLockReturnUrl() 函数中添加自定义实现来将其更改为任何你想要的URL。
例如,如果你想将“返回”按钮重定向到 https://laracasts.com,你可以按照以下方式覆盖该函数
public function resourceLockReturnUrl(): string { return 'https://laracasts.com'; }
现在返回URL将重定向到 laracasts.com
这将改变“返回”按钮的行为,使其重定向到提供的URL。
发布迁移、配置和视图
php artisan vendor:publish --tag="resource-lock-migrations"
php artisan migrate
你可以使用以下命令发布和运行迁移
php artisan vendor:publish --tag="resource-lock-migrations"
php artisan migrate
你可以使用以下命令发布配置文件
php artisan vendor:publish --tag="resource-lock-config"
可选地,你可以使用以下命令发布视图
注意:发布Blade视图可能会对你的应用程序引入破坏性更改。如果你对此感兴趣,请参阅 Dan Harrin 的这篇文章:发布Laravel中的视图。
php artisan vendor:publish --tag="resource-lock-views"
T
即将推出
- 表格行的锁定状态指示器
- 轮询
- 乐观锁定
变更日志
请参阅 CHANGELOG 了解最近有哪些更改。
贡献
请参阅 CONTRIBUTING 了解详细信息。
许可证
MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。