soap / laravel-workflow-process
提供使用Symfony表达式和相关对象实现Laravel工作流守卫
v0.1.2
2024-09-26 17:40 UTC
Requires
- php: ^8.2|^8.3
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
- symfony/expression-language: ^7.1
- zerodahero/laravel-workflow: ^4.0||^5.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.5
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ray: ^1.35
README
使用Zerodahero的Laravel Workflow(基于Symfony Workflow)来处理状态转换工作流是非常好的。然而,在事件中编写转换守卫代码很难。此包提供了一种简单的方法;您可以为每个转换添加Symfony表达式语言作为转换守卫。此配置必须使用'guard'键在转换元数据中提供。包订阅所有工作流转换守卫事件,并使用提供的Symfony表达式语言允许或阻止转换。
支持我
欢迎任何建议或拉取请求。如果您觉得我的工作有价值,赞助我将非常棒。
安装
您可以通过composer安装此包
composer require soap/laravel-workflow-process
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="laravel-workflow-process-config"
这是已发布配置文件的内容
return [
];
用法
您必须完成的任务是提供如下示例中的守卫配置。这位于laravel-workflow的配置文件中(config/workflow.php)。如果您想将工作流配置存储在数据库中,请访问我的Laravel Workflow Loader包。
// file config/workflow.php use ZeroDaHero\LaravelWorkflow\MarkingStores\EloquentMarkingStore; return [ 'blogPost' => [ 'type' => 'workflow', 'supports' => [App\Models\BlogPost::class], 'marking_store' => [ 'property' => 'state', 'type' => 'single_state', 'class' => EloquentMarkingStore::class, ], 'places' => ['draft', 'pending_for_review', 'approved', 'rejected', 'published', 'archived'], 'transitions' => [ 'submit' => [ 'from' => 'draft', 'to' => 'pending_for_review', 'metadata' => [ 'guard' => 'authenticated and subject.isOwnedBy(user)', ], ], 'approve' => [ 'from' => 'pending_for_review', 'to' => 'approved', ], 'reject' => [ 'from' => 'pending_for_review', 'to' => 'rejected', ], 'publish' => [ 'from' => 'approved', 'to' => 'published', ], 'archive' => [ 'from' => ['draft', 'rejected'], 'to' => 'archived', ], ], ] ];
当前这些变量/对象被注入到Symfony表达式语言中。
- "subject"是工作流的主题Eloquent模型。
- "user"是认证用户。
- "authenticated"布尔值,如果用户已认证则为true。
因此,您可以调用注入对象上的任何方法。
待办事项
我有计划提供文档角色给用户。例如,一些用户可能被分配为Eloquent模型的"审阅者"或"审批者"。因此,我们可以使用类似subject.hasActorRole('reviewer')或subject.canBeReviewedBy(user)的东西。欢迎任何建议。
测试
composer test
变更日志
请参阅CHANGELOG了解最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请查看我们的安全策略了解如何报告安全漏洞。
致谢
许可协议
MIT许可(MIT)。请参阅许可文件了解更多信息。