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

Fasáda Approvals

Všetko ide cez jedno API — fasádu Approvals, injektovateľný ApprovalsManager, ktorý za ňou stojí, alebo akcie, ktoré spúšťa. Všetky tri vykonávajú ten istý kód a odporúčaným vstupným bodom je fasáda. Registruje sa automaticky. Celý rozsah:

use RoundlyConsulting\Approvals\Facades\Approvals;

// One actor's decision on one approvable
Approvals::for($deployment)->as($user)->because('Looks good to me')->approve();
Approvals::for($deployment)->as($user)->because('Please add tests')->reject(); // withdraws the approval above
Approvals::for($deployment)->as($user)->ask();                 // ask the actor: a pending decision
Approvals::for($deployment)->as($user)->cancel();              // withdraw the actor's live decision
Approvals::for($deployment)->as($user)->toggle();              // simple on/off
Approvals::for($deployment)->as($user)->expiresIn(86400)->approve(); // valid for a day
Approvals::for($deployment)->as($user)->weight(3)->approve();  // override the decision's weight
Approvals::for($invoice)->as($user)->within($request)->approve(); // pin to one request

// Reads
Approvals::for($deployment)->as($user)->isApproved();  // bool
Approvals::for($deployment)->as($user)->isRejected();  // bool
Approvals::for($deployment)->hasPending();             // bool — any pending decision

// Multi-approver requests (flat, staged, or from a workflow preset)
Approvals::request($invoice)->from([$a, $b, $c])->quorum(2)->expiresIn(3600)->open();
Approvals::request($release)->stages([...])->continueOnRejection()->expiringAt($t)->open();
Approvals::request($budget)->workflow('payout')->open([$a, $b, $c]);

Approvals::status($invoice);        // ApprovalStatus of the latest request (Pending when none)
Approvals::progress($invoice);      // ?ApprovalProgress
Approvals::currentStage($release);  // ?ApprovalRequestStage
Approvals::preset('payout');        // WorkflowPreset from config

// Delegation
Approvals::delegations($boss)->to($deputy)->from($monday)->until($friday)->grant();
Approvals::delegations($boss)->revoke($deputy);   // or ->revoke() for all; returns int
Approvals::delegations($boss)->active();          // Collection<ApprovalDelegation>
Approvals::delegationFor($deputy);                // ?ApprovalDelegation in force now

// Housekeeping
Approvals::expire();                // lapse overdue asks, approvals and requests; returns int
Approvals::expire(subjectType: Invoice::class); // only those on invoices (class or morph alias)

Metódy fasády

MetódaVraciaÚčel
for($approvable)PendingApprovalZačne rozhodnutie o schvaľovanom modeli; aktéra nastavíte cez as().
as($actor)PendingApprovalZačne rozhodnutie aktéra; schvaľovaný model nastavíte cez for().
request($subject)PendingApprovalRequestOtvorí žiadosť pre viacerých schvaľovateľov — jednostupňovú, viacstupňovú alebo zo šablóny.
status($subject)ApprovalStatusStav poslednej žiadosti subjektu; Pending, ak žiadnu nemá, a Expired, keď otvorenej žiadosti uplynula platnosť.
progress($subject)?ApprovalProgressSnímka priebehu poslednej žiadosti.
currentStage($subject)?ApprovalRequestStageOtvorený stupeň poslednej viacstupňovej žiadosti.
preset($name)WorkflowPresetNačíta a overí šablónu z config('approvals.workflows').
delegations($delegator)DelegationsHandleUdelí, zruší a vypíše delegovania jedného delegujúceho.
delegationFor($delegate, ?$at)?ApprovalDelegationDelegovanie, v rámci ktorého model koná v čase $at (predvolene teraz).
expire(?$now, ?$subjectType)intNechá vypršať zmeškané vyžiadania, schválenia a žiadosti a vráti ich počet. S $subjectType (trieda modelu alebo morph alias) len tie na danom type.
fake()ApprovalsFakeVymení manažér za zaznamenávajúci fake; recorded() aj všetky assert*() potom zavoláte aj na fasáde (pozri Testovanie).

Rozhodnutia — PendingApproval

Začnite od schvaľovaného modelu cez for() alebo od aktéra cez as(), doplňte kontext a zavolajte terminálnu metódu. Žiadosť, ktorá vymenúva schvaľovateľov, každého iného odmietne výnimkou UnauthorizedApprovalException a uzavretá žiadosť odmietne každé rozhodnutie výnimkou ClosedApprovalRequestException:

MetódaVraciaÚčel
for($approvable)selfNastaví model, o ktorom sa rozhoduje.
as($actor)selfNastaví model, ktorý rozhoduje.
within($request)selfPripojí rozhodnutie k tejto žiadosti namiesto poslednej otvorenej. Musí patriť schvaľovanému modelu (inak InvalidApprovalRequestException) a byť ešte otvorená (inak ClosedApprovalRequestException).
because($reason)selfPripojí dôvod — uloží ho approve(), reject() a cancel().
weight($n)selfPrebije váhu tohto rozhodnutia — pre approve() a reject().
expiresIn($seconds)selfExpirácia o N sekúnd — uplatní ju approve() a ask().
expiringAt($at)selfAbsolútna expirácia — uplatní ju approve() a ask().
approve()ApprovalZaznamená schválenie. Započíta sa do pripnutej žiadosti, inak do poslednej otvorenej žiadosti modelu; opakovanie nič nezmení.
reject()ApprovalZaznamená zamietnutie — schválenie, ktoré aktér mal, sa stiahne.
ask()ApprovalVyžiada od aktéra čakajúce rozhodnutie; ak už živé rozhodnutie má, vráti ho nezmenené.
cancel()?ApprovalStiahne živé rozhodnutie aktéra — alebo to, ktoré urobil ako zástupca — v kole, kam by smerovalo rozhodnutie; null, ak žiadne nie je.
toggle()boolJednoduchý prepínač — true schválené (cez approve()), false stiahnuté.
isApproved()boolČi má aktér pre daný model schválenie, ktoré ešte platí.
isRejected()boolČi má aktér pre daný model zamietnutie.
hasPending()boolČi má model akékoľvek čakajúce rozhodnutie, ktorému ešte neuplynul termín — stačí for().

Žiadosti — PendingApprovalRequest

MetódaVraciaÚčel
from([...])selfMenovaní schvaľovatelia jednostupňovej žiadosti — rozhodovať môžu len oni (alebo ich zástupcovia). Každý sa uloží raz; required_approvers je predvolene ich počet.
rule($rule, ?$quorum)selfPravidlo a prah jednostupňovej žiadosti — predvolene Unanimous.
any() / quorum($n) / weighted($n)selfSkratky pre rule(Any), rule(Quorum, $n) a rule(Weighted, $n).
stages([StageDefinition, ...])selfZmení žiadosť na viacstupňovú. Spolu s from() vyhodí open() InvalidApprovalRequestException.
continueOnRejection()selfViacstupňová: pokračuje aj po zamietnutom stupni.
expiresIn($s) / expiringAt($t)selfNastaví expires_at na žiadosti.
open()ApprovalRequestOtvorí jednostupňovú alebo viacstupňovú žiadosť; prah, ktorý by schvaľovatelia nikdy nedosiahli, odmietne.
workflow($name)->open([...])ApprovalRequestOtvorí žiadosť zo šablóny — plochý zoznam alebo jeden zoznam na stupeň.

Delegovanie — DelegationsHandle

MetódaVraciaÚčel
delegations($d)->to($delegate)PendingDelegationZačne delegovanie — nič sa nezapíše pred grant().
->from($t) / ->until($t) / ->for($seconds)PendingDelegationNastaví obdobie; for() sa počíta od začiatku (bez from() od teraz).
->grant()ApprovalDelegationOverí obdobie, uloží ho a spustí ApprovalDelegated.
delegations($d)->revoke(?$delegate)intZruší aktívne aj naplánované delegovania tohto delegujúceho — alebo len tie na $delegate.
delegations($d)->active(?$at)Collection<ApprovalDelegation>Delegovania platné v čase $at (teraz), najnovšie prvé.

Pripnutie k žiadosti, pomocníka approvals(), absolútnu expiráciu a neúplné buildery nájdete v časti Fluentné buildery; to isté API bez fasády v časti DI a akcie.

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.