NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Approvals for Laravel

Traity modelov

Schvaľovania sú polymorfné na oboch stranách. Aktérom, ktorý rozhoduje, môže byť akýkoľvek model — používateľ, tím, servisný účet — a schvaľovaným modelom tiež akýkoľvek — nasadenie, dokument, komentár. Pre každú rolu pridajte príslušný trait:

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;
use RoundlyConsulting\Approvals\Traits\HasApprovals;
use RoundlyConsulting\Approvals\Traits\RequiresApproval;

class User extends Model
{
    use GivesApprovals;     // the actor — decides on things
}

class Deployment extends Model
{
    use HasApprovals;       // the approvable — gets decided on
}

class Release extends Model
{
    use HasApprovals;
    use RequiresApproval;   // a subject that needs multi-approver sign-off
}
TraitRozhraniePridajte ho na
GivesApprovalsGivesApprovalsInterfaceAktéra, ktorý rozhoduje — používateľa, tím, servisný účet.
HasApprovalsHasApprovalsInterfaceSchvaľovaný model — nasadenie, dokument, komentár.
RequiresApprovalRequiresApprovalInterfaceSubjekt, ktorý potrebuje súhlas viacerých schvaľovateľov cez žiadosť.

Jeden model môže používať všetky tri — napríklad tím, ktorý schvaľuje prácu iných a zároveň sám potrebuje súhlas. Relácia strany aktéra je givenApprovals() a schvaľovanej strany approvals(), takže sa traity nikdy nebijú.

Strana aktéra — GivesApprovals

$user->approve($deployment, 'LGTM');       // Approval
$user->reject($deployment, 'needs work');  // Approval
$user->cancelApproval($deployment);        // ?Approval
$user->toggleApproval($deployment);        // bool (simple on/off)

$user->hasApproved($deployment);           // bool — holds an approval still in force
$user->hasRejected($deployment);           // bool — holds a rejection
$user->approvalFor($deployment);           // ?Approval (latest)
$user->givenApprovals;                     // Collection<Approval> — every decision the user recorded

$user->delegateApprovalsTo($assistant);    // ApprovalDelegation — granted at once (see Delegation)
$user->revokeApprovalDelegation();         // int — delegations revoked
$user->approvalDelegations;                // delegations this actor handed out

hasApproved() a hasRejected() znamenajú „má rozhodnutie s týmto stavom“ — nie iba „existuje riadok“ — a schválenie po uplynutí platnosti sa okamžite prestane počítať.

Schvaľovaná strana — HasApprovals

$deployment->hasBeenApprovedBy($user);    // bool
$deployment->hasBeenRejectedBy($user);    // bool
$deployment->isApprovedBy($user);         // bool — alias of hasBeenApprovedBy()
$deployment->approvalCount();             // int — approvals still in force
$deployment->pendingApprovals();          // Collection<Approval> — asks not yet past their deadline
$deployment->approvals;                   // Collection<Approval> — every decision on the deployment

Subjekt žiadosti — RequiresApproval

$release->requestApproval([$lead, $qa, $pm]);   // ApprovalRequest — Unanimous by default
$release->requestStagedApproval($stages);       // ApprovalRequest — list<StageDefinition>

$release->currentApprovalStatus();   // ApprovalStatus — Pending when no request exists, Expired once it is overdue
$release->isApproved();              // bool
$release->isPendingApproval();       // bool
$release->currentStage();            // ?ApprovalRequestStage — the open stage
$release->approvalProgress();        // ?ApprovalProgress
$release->approvalRequests;          // every request whose subject is this model

currentApprovalStatus(), isApproved(), isPendingApproval(), currentStage() aj approvalProgress() čítajú poslednú žiadosť subjektu. Kým žiadna neexistuje, currentApprovalStatus() vráti Pending a approvalProgress() vráti null; keď otvorenej žiadosti uplynie platnosť, stav ukáže Expired ešte predtým, než ju zaznamená pravidelné vypršanie.

Typujte podľa schopnosti

Každý trait má zodpovedajúce rozhranie v RoundlyConsulting\Approvals\Interfaces — závislosť tak viažete na schopnosť, nie na konkrétny model:

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Approvals\Interfaces\GivesApprovalsInterface;
use RoundlyConsulting\Approvals\Interfaces\HasApprovalsInterface;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;

class User extends Model implements GivesApprovalsInterface
{
    use GivesApprovals;
}

function approvalBadge(HasApprovalsInterface $approvable): string
{
    return $approvable->approvalCount().' approvals';
}

Rozhrania pokrývajú základné rozhodovacie metódy; pomocníci pre delegovanie a stupne sú len na traitoch.

Skratka nad manažérom

Traity sú len skratkou: každá zmena stavu, ktorú urobia — approve(), reject(), requestApproval(), delegateApprovalsTo() a ďalšie — prechádza cez ApprovalsManager, tú istú triedu, ktorá stojí za fasádou Approvals. Approvals::fake() ju preto zaznamená tiež.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.