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); } }