victorlap/laravel-approvable

此包已被废弃且不再维护。未建议替代包。

轻松为任何 Laravel 模型添加审批流程

1.2.0 2019-08-14 13:46 UTC

This package is auto-updated.

Last update: 2022-03-01 00:21:15 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score StyleCI Total Downloads

轻松为任何 Laravel 模型添加审批流程。

描述

Laravel Approvable 是一个包,可以帮助你在应用程序中有某些模型需要用户编辑时,但编辑的字段需要先进行审批。

安装

通过 Composer

$ composer require victorlap/laravel-approvable

您可以使用以下命令发布迁移:

php artisan vendor:publish --provider="Victorlap\Approvable\ApprovableServiceProvider" --tag="migrations"
php artisan migrate

设置

假设您有一个 Post 模型。您的网站上每个访客都可以编辑任何帖子,但在您想要将更改发布到您的网站之前,您想要先对其进行审批。通过将 \Victorlap\Approvable\Approvable 特性添加到您的 Post 模型中,当访客进行更改时,更改请求将存储在数据库中。然后,管理员可以稍后应用或拒绝这些更改。可以使用 currentUserCanApprove 方法来确定谁有权进行更改。

use Illuminate\Database\Eloquent\Model;
use Victorlap\Approvable\Approvable;

// Minimal
class Post extends Model
{
    use Approvable;   
}

// Extended
class Post extends Model
{
    use Approvable;

    protected $approveOf = array();

    protected $dontApproveOf = array();
    
    protected function currentUserCanApprove()
    {
        return Auth::check();
    }
    
    protected function getSystemUserId()
    {
        return Auth::id();
    }
}

用法

由可以审批的用户进行的模型更改不会改变。

$post->title = "Very Good Post";
$post->save(); // This still works!

未经授权的用户进行的更改工作方式相同。

$post->title = "Very Good Post";
$post->save(); // Post remains with the old title in the database, however a change request is now also present.

您可以使用以下方法检索具有待处理更改的属性列表:

$post->getPendingApprovalAttributes();

或检查某个属性是否有待处理的更改

$post->isPendingApproval('title');

已定义范围以快速查看不同状态下的审批。例如,如果您想向管理员显示可以接受更改的列表,可以使用 open 范围。其他范围是 acceptedrejectedofClass

Approval::open()->get();
Approval::accepted()->get();
Approval::rejected()->get();
Approval::ofClass(Post::class)->get();

当然,您可以将范围组合起来,或者将它们与常规查询构建器方法结合使用。

Approval::open()->ofClass(Post::class)->get();

可以使用 Approval 上的 acceptreject 方法来进行审批的接受和拒绝。

$approvals = Post::find(1)->approvals()->open()->get();
$approvals->each->accept(); // or
$approvals->each->reject();

如果您不想让模型通过审批,可以使用 withoutApproval() 方法。

// Now this post model is not checked for changes.
$post->withoutApproval()
      ->fill([
        'title' => 'A new title',
      ])
      ->save();

要重新启用此模型实例的审批,您可以使用 withApproval() 方法。

限制

目前 Approvable 不处理模型的创建,欢迎对此提出 PR。

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

测试

$ composer test

贡献

请参阅 CONTRIBUTINGCONDUCT 了解详细信息。

安全

如果您发现任何安全问题,请通过电子邮件发送到 victorlap@outlook.com,而不是使用问题跟踪器。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 获取更多信息。