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

Schvaľovateľ môže odovzdať svoju právomoc inému modelu na určité obdobie. Kým delegovanie platí, rozhodnutia zástupcu sa počítajú za delegujúceho — schválenie zaznamená delegujúceho (ako actor) aj zástupcu (ako decided_by):

use Carbon\CarbonImmutable;
use RoundlyConsulting\Approvals\Facades\Approvals;

Approvals::delegations($manager)->to($assistant)->until(CarbonImmutable::now()->addWeek())->grant();
// or ->from($start), ->for($seconds) (measured from the start), or no window at all

$approval = Approvals::for($release)->as($assistant)->approve();   // counts as $manager
$approval->wasDelegated();                   // true
$approval->actor;                            // $manager
$approval->decidedBy;                        // $assistant

Approvals::for($release)->as($assistant)->cancel();   // the delegate can withdraw what it decided for $manager

Nastavenie obdobia

Approvals::delegations($delegator)->to($delegate) zbiera obdobie cez from(), until() alebo for(); nič sa nezapíše pred grant(), ktoré uloží ApprovalDelegation a raz spustí ApprovalDelegated už s konečným obdobím. Bez obdobia je delegovanie neobmedzené. delegateApprovalsTo() z traitu udelí delegovanie okamžite:

use Carbon\CarbonImmutable;
use RoundlyConsulting\Approvals\Facades\Approvals;

// A fixed leave window.
Approvals::delegations($manager)->to($assistant)
    ->from(CarbonImmutable::parse('2026-08-03'))
    ->until(CarbonImmutable::parse('2026-08-14'))
    ->grant();   // ApprovalDelegation

// One hour from now.
$delegation = Approvals::delegations($manager)->to($assistant)->for(3600)->grant();

// GivesApprovals shorthand — grants at once and returns the ApprovalDelegation
$manager->delegateApprovalsTo($assistant);                                        // open-ended
$manager->delegateApprovalsTo($assistant, until: CarbonImmutable::now()->addWeek());

Zrušenie a prehľad

Approvals::delegations($manager)->revoke();             // revoke all — active and scheduled; returns the count
Approvals::delegations($manager)->revoke($assistant);   // revoke one delegate
Approvals::delegations($manager)->active();             // Collection<ApprovalDelegation> in force now, newest first
Approvals::delegationFor($assistant);                   // ?ApprovalDelegation the assistant acts under now

$manager->revokeApprovalDelegation($assistant);         // GivesApprovals shorthand
$manager->approvalDelegations;                          // every delegation handed out

$delegation->isActiveAt();                              // bool — started, not ended, not revoked
$delegation->isActiveAt(CarbonImmutable::parse('2026-08-10'));
$delegation->revoke();                                  // sets revoked_at on this one model

revoke() zruší delegovania delegujúceho, ktoré platia alebo sú naplánované na neskôr — alebo len tie na jedného zástupcu — nastaví revoked_at, pri každom zrušení spustí ApprovalDelegationRevoked a vráti ich počet. Delegovaní iného delegujúceho sa nikdy nedotkne. Volanie revoke() na jednom modeli ApprovalDelegation nastaví revoked_at bez spustenia udalosti.

Pravidlá pripísania

  • Delegovanie platí, ak nie je zrušené, už začalo (starts_at je prázdne alebo v minulosti) a ešte neskončilo (ends_at je prázdne alebo ešte len príde).
  • Pri žiadosti s menovanými schvaľovateľmi smie zástupca rozhodnúť za menovaného delegujúceho a model, ktorý je sám menovaným schvaľovateľom, rozhoduje vždy sám za seba, aj keď zároveň niekoho zastupuje.
  • Inde sa každé rozhodnutie zástupcu počíta za delegujúceho; ak platí viac delegovaní, rozhoduje to naposledy vytvorené. Váha sa berie od delegujúceho.
  • Autorizačná kontrola overuje konajúceho zástupcu ešte pred prepísaním rozhodnutia na delegujúceho.
  • Zástupca môže rozhodnutie, ktoré urobil za delegujúceho, stiahnuť cez cancel() alebo cancelApproval().
  • ask() je adresované priamo vyžiadanému modelu, nikdy tomu, koho zastupuje.

Validácia

grant() všetko overí ešte pred zápisom: delegovanie na seba aj obdobie, ktoré končí skôr, než začne, vyhodia InvalidDelegationException a nezostane po nich žiadny riadok:

use Carbon\CarbonImmutable;
use RoundlyConsulting\Approvals\Facades\Approvals;

Approvals::delegations($manager)->to($assistant)
    ->from(CarbonImmutable::parse('2026-08-14'))
    ->until(CarbonImmutable::parse('2026-08-03'))   // ends before it starts
    ->grant();   // throws InvalidDelegationException — no row is written

Approvals::delegations($manager)->to($manager)->grant();   // throws InvalidDelegationException — self-delegation

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.