soap / laravel-workflow-process

提供使用Symfony表达式和相关对象实现Laravel工作流守卫

v0.1.2 2024-09-26 17:40 UTC

This package is auto-updated.

Last update: 2024-09-27 22:40:27 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

使用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)。请参阅许可文件了解更多信息。