aymanalhattami / laravel-approval
将审批附加到任何模型,以防止未经授权的更新。
Requires (Dev)
- laravel/framework: ~5.5.0|~5.6.0|~5.7.0|^6.0|^7.0|^8.0|^9.0|^10.0
This package is auto-updated.
Last update: 2024-09-24 14:58:01 UTC
README
将修改审批附加到任何模型,以防止未经授权的更新。
注意:此包是从cloudcake/laravel-approval分叉而来,以便支持最新的Laravel版本并添加新功能
入门指南
通过composer安装此包
composer require aymanalhattami/laravel-approval
注册服务提供者
此包使用Laravel的自动发现。如果您正在使用Laravel的早期版本(< 5.4),则需要手动注册服务提供者。
将Approval\ApprovalServiceProvider::class
添加到config/app.php
中的providers
数组中。
发布配置
php artisan vendor:publish --provider="Approval\ApprovalServiceProvider" --tag="config"
发布迁移
php artisan vendor:publish --provider="Approval\ApprovalServiceProvider" --tag="migrations"
运行迁移
php artisan migrate
设置
设置审批模型
要将模型附加到审批流程,只需简单地给模型添加RequiresApproval
特性,例如
use Approval\Traits\RequiresApproval; use Illuminate\Database\Eloquent\Model; class Post extends Model { use RequiresApproval; }
条件审批
可能存在某些情况下您不希望模型总是经过审批流程,因此提供了requiresApprovalWhen
以供方便使用,默认为false,以防止在后台意外创建审批
/** * Function that defines the rule of when an approval process * should be actioned for this model. * * @param array $modifications * * @return boolean */ protected function requiresApprovalWhen(array $modifications) : bool { // Handle some logic that determines if this change requires approval // // Return true if the model requires approval, return false if it // should update immediately without approval. return false; }
可选属性
审批模型包含一些可选属性,以使审批流程尽可能灵活。以下属性默认定义,并具有默认值,您可以根据需要按模型修改它们。
/** * Number of approvers this model requires in order * to mark the modifications as accepted. * * @var integer */ protected $approversRequired = 1; /** * Number of disapprovers this model requires in order * to mark the modifications as rejected. * * @var integer */ protected $disapproversRequired = 1; /** * Boolean to mark whether or not this model should be updated * automatically upon receiving the required number of approvals. * * @var boolean */ protected $updateWhenApproved = true; /** * Boolean to mark whether or not the approval model should be deleted * automatically when the approval is disapproved wtih the required number * of disapprovals. * * @var boolean */ protected $deleteWhenDisapproved = false; /** * Boolean to mark whether or not the approval model should be deleted * automatically when the approval is approved wtih the required number * of approvals. * * @var boolean */ protected $deleteWhenApproved = true;
设置审批者模型
任何其他模型(不仅仅是用户模型)可以通过添加ApprovesChanges
特性来审批模型,例如
use Approval\Traits\ApprovesChanges; use Illuminate\Database\Eloquent\Model; class Admin extends Model { use ApprovesChanges; }
任何具有ApprovesChanges
特性的模型都继承了审批访问功能。
审批者授权(可选)
默认情况下,任何具有ApprovesChanges
特性的模型都将能够审批和拒绝修改。您可以通过在特定的审批者模型上添加authorizedToApprove
方法来自定义授权以审批/拒绝修改。
use Approval\Traits\ApprovesChanges; use Illuminate\Database\Eloquent\Model; class Admin extends Model { use ApprovesChanges; protected function authorizedToApprove(\Approval\Models\Modification $mod) : bool { // Return true to authorize approval, false to deny return true; } }
拒绝者授权(可选)
与审批流程类似,拒绝修改的授权方法遵循相同的逻辑
use Approval\Traits\ApprovesChanges; use Illuminate\Database\Eloquent\Model; class Admin extends Model { use ApprovesChanges; protected function authorizedToApprove(\Approval\Models\Modification $mod) : bool { // Return true to authorize approval, false to deny return true; } protected function authorizedToDisapprove(\Approval\Models\Modification $mod) : bool { // Return true to authorize disapproval, false to deny return true; } }
用法
检索待审批的修改
任何包含RequiresApproval
特性的模型可能有多个待审批的修改,要访问这些修改,可以在审批模型上调用modifications()
方法
$post = Post::find(1); $post->modifications()->get();
仅检索待创建的修改
$post = Post::find(1); $post->modifications()->creations()->get();
仅检索待更改的修改
$post = Post::find(1); $post->modifications()->changed()->get();
检索修改创建者
对于模型上的任何待审批的修改,您可以获取发起修改请求的模型
$post = Post::find(1); $post->modifications()->first()->modifier();
此(修改者)通常是更改模型并触发审批修改的用户,但由于审批支持不仅仅是用户,因此创建者可以是任何其他模型。
检索模型的修改
$active = Post::find(1)->modifications()->activeOnly()->get(); $inactive = Post::find(1)->modifications()->inactiveOnly()->get(); $any = Post::find(1)->modifications()->get();
添加修改审批
$modification = Post::find(1)->modifications()->first(); $reason = "This is optional reason."; $approver = Admin::first(); $approver->approve($modification, $reason);
添加修改拒绝
$modification = Post::find(1)->modifications()->first(); $reason = "This is optional reason."; $approver = Admin::first(); $approver->disapprove($modification, $reason);
检索修改审批
$post = Post::find(1); $modification = $post->modifications()->first(); $approval = $modification->approvals()->get();
检索审批作者
$post = Post::find(1); $modification = $post->modifications()->first(); $approval = $modification->approvals()->get(); $author = $approval->approver();
检索审批理由
$post = Post::find(1); $modification = $post->modifications()->first(); $approval = $modification->approvals()->first(); $reason = $approval->reason;
检索修改拒绝
$post = Post::find(1); $modification = $post->modifications()->first(); $approval = $modification->disapprovals()->get();
检索拒绝作者
$post = Post::find(1); $modification = $post->modifications()->first(); $approval = $modification->disapprovals()->get(); $author = $approval->disapprover();
检索拒绝理由
$post = Post::find(1); $modification = $post->modifications()->first(); $approval = $modification->disapprovals()->first(); $reason = $approval->reason;
检索剩余所需修改审批
$post = Post::find(1); $modification = $post->modifications()->first(); $remaining = $modification->approversRemaining;
检索剩余的所需修改拒绝
$post = Post::find(1); $modification = $post->modifications()->first(); $remaining = $modification->disapproversRemaining;
强制修改更新
$post = Post::find(1); $modification = $post->modifications()->first(); $modification->forceApprovalUpdate();