moffhub/maker-checker

一个用于帮助管理严格的 Maker-Checker 模式的 Laravel 扩展包

v0.0.8 2024-08-28 23:41 UTC

This package is auto-updated.

Last update: 2024-09-04 23:02:26 UTC


README

MakerChecker 是一个提供简单方式在 Laravel 应用程序中实现 Maker-Checker 模式的包。

安装

您可以通过 composer 安装此包

composer require moffhub/maker-checker

此包依赖于 sourcetoad\enhanced-resources,您也可以通过 composer 安装

composer require sourcetoad\enhanced-resources

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Moffhub\MakerChecker\MakerCheckerServiceProvider" --tag="config"

这是发布配置文件的内容

用法

首先,您需要将 ChecksRequests 特性添加到您想要检查其角色和权限的模型中,通常是 User 模型。

use Moffhub\MakerChecker\Traits\ChecksRequests;

class Post extends Model
{
    use ChecksRequests;
}

然后,您可以使用 makerChecker 方法创建新记录。

 if (auth()->user()->requiresApproval('create', Post::class)) {
            $approvalRequest = MakerChecker::request()
                ->toExecute(
                    $approvableActionClass,
                    (array) $data,
                )
                ->madeBy(auth()->user())
                ->description('Create Posts')
                ->save();

            return MakerCheckerResource::make($approvalRequest)
                ->format(MakerCheckerResource::SIMPLE)
                ->response()
                ->setStatusCode(Response::HTTP_MULTI_STATUS);
        }

可审批的操作

此库支持创建、删除、更新和执行操作。您可以通过扩展 ApprovableAction 类来创建自己的操作。

这可以通过以下方式配置:

对于执行操作,您还可以传递一个包含可以审批请求的角色数组的数组和每个角色审批请求所需批准的数量

MakerChecker::request()->toExecute(
                    $approvableActionClass,
                    (array) $data,
                    [
                        'admin'=> 2,
                        'client' => 3,
                    ],
                )

对于创建操作

MakerChecker::request()->toCreate(
                    $createActionClass,
                    (array) $data,
                )

对于更新操作

MakerChecker::request()->toUpdate(
                    $updateActionClass,
                    (array) $data,
                )

对于删除操作

MakerChecker::request()->toDelete(
                    $deleteActionClass,
                    (array) $data,
                )