From 74de79e4c396ea270b6e7747f7062ee0dab24cec Mon Sep 17 00:00:00 2001 From: lizhuoran <625237490@qq.com> Date: Mon, 9 Mar 2026 13:25:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=98=B6=E6=AE=B5=E5=9B=9B):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20SOP=20=E6=A8=A1=E6=9D=BF=E6=9D=83=E9=99=90=E7=AD=96?= =?UTF-8?q?=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 SopTemplatePolicy 策略类 - 实现查看、创建、更新、删除权限 - 实现发布和归档权限 - 已发布的模板不能编辑和删除 - 只有草稿状态可以发布 - 只有已发布状态可以归档 - 在 AppServiceProvider 中注册策略 --- app/Policies/SopTemplatePolicy.php | 75 ++++++++++++++++++++++++++++ app/Providers/AppServiceProvider.php | 6 +++ 2 files changed, 81 insertions(+) create mode 100644 app/Policies/SopTemplatePolicy.php diff --git a/app/Policies/SopTemplatePolicy.php b/app/Policies/SopTemplatePolicy.php new file mode 100644 index 0000000..5e13e62 --- /dev/null +++ b/app/Policies/SopTemplatePolicy.php @@ -0,0 +1,75 @@ +status === 'published') { + return false; + } + + return true; + } + + /** + * 删除 SOP 模板 + */ + public function delete(User $user, SopTemplate $sopTemplate): bool + { + // 已发布的模板不能删除 + if ($sopTemplate->status === 'published') { + return false; + } + + return true; + } + + /** + * 发布 SOP 模板 + */ + public function publish(User $user, SopTemplate $sopTemplate): bool + { + return $sopTemplate->status === 'draft'; + } + + /** + * 归档 SOP 模板 + */ + public function archive(User $user, SopTemplate $sopTemplate): bool + { + return $sopTemplate->status === 'published'; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index d64d3cc..a3ceb0a 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,8 +3,11 @@ namespace App\Providers; use App\Models\Document; +use App\Models\SopTemplate; use App\Observers\DocumentObserver; +use App\Policies\SopTemplatePolicy; use Carbon\Carbon; +use Illuminate\Support\Facades\Gate; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -27,5 +30,8 @@ class AppServiceProvider extends ServiceProvider // 注册文档观察者,用于自动管理 Meilisearch 索引 Document::observe(DocumentObserver::class); + + // 注册策略 + Gate::policy(SopTemplate::class, SopTemplatePolicy::class); } }