victorlap / laravel-approvable
轻松为任何 Laravel 模型添加审批流程
Requires
- php: ^7.2
- illuminate/database: ^5.8|^6.0
- illuminate/support: ^5.8|^6.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ^3.8
- phpunit/phpunit: ^7.5|^8.0
This package is auto-updated.
Last update: 2022-03-01 00:21:15 UTC
README
轻松为任何 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 范围。其他范围是 accepted、rejected 和 ofClass。
Approval::open()->get(); Approval::accepted()->get(); Approval::rejected()->get(); Approval::ofClass(Post::class)->get();
当然,您可以将范围组合起来,或者将它们与常规查询构建器方法结合使用。
Approval::open()->ofClass(Post::class)->get();
可以使用 Approval 上的 accept 和 reject 方法来进行审批的接受和拒绝。
$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
贡献
请参阅 CONTRIBUTING 和 CONDUCT 了解详细信息。
安全
如果您发现任何安全问题,请通过电子邮件发送到 victorlap@outlook.com,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 获取更多信息。