Nastavenie modelov
Schvaľovatelia
Každý model, ktorý má schvaľovať žiadosti — typicky váš User — použije trait a rozhranie aktéra zo schvaľovacieho enginu:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Approvals\Interfaces\GivesApprovalsInterface;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;
class User extends Model implements GivesApprovalsInterface
{
use GivesApprovals;
}Aktér tým získa celé schvaľovacie API:
$alice->approve($request, 'Looks good'); // record an approval with a reason
$alice->reject($request, 'Out of policy'); // record a rejection with a reason
$alice->cancelApproval($request); // withdraw the decision
$alice->hasApproved($request); // bool
$alice->hasRejected($request); // bool
$alice->delegateApprovalsTo($bob); // see DelegationRozhodnutia urobené priamo na aktérovi stále posunú stav žiadosti, keď engine uzavrie jej schvaľovaciu požiadavku. Ak chcete všetky udalosti balíka (ApprovalRecorded, ApprovalRevoked) a pri žiadostiach bez deklarovaných schvaľovateľov, rozhodujte cez fasádu Requests (Rozhodovanie o žiadostiach).
Rozhodnúť môže len deklarovaný schvaľovateľ alebo jeho zástupca, a to aj na aktérovi: $mallory->approve($request) vyhodí výnimku enginu UnauthorizedApprovalException a nič sa nezaznamená.
Autori
Trait a kontrakt HasRequests pridajte každému modelu, ktorý podáva žiadosti. Získa reláciu morphMany a skratky filtrované podľa stavu:
use RoundlyConsulting\Requests\Concerns\HasRequests;
use RoundlyConsulting\Requests\Contracts\HasRequests as HasRequestsContract;
class User extends Model implements HasRequestsContract
{
use HasRequests;
}
$user->requests; // morphMany relation
$user->openRequests()->get(); // status = New
$user->approvedRequests()->get();
$user->rejectedRequests()->get();Relácie používajú model nakonfigurovaný v requests.model, takže vlastnú podtriedu dostanete aj z $user->requests.
Oboje na jednom modeli
Traity spolu nekolidujú, takže ten istý model môže žiadosti podávať aj schvaľovať:
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Approvals\Interfaces\GivesApprovalsInterface;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;
use RoundlyConsulting\Requests\Concerns\HasRequests;
use RoundlyConsulting\Requests\Contracts\HasRequests as HasRequestsContract;
class User extends Authenticatable implements GivesApprovalsInterface, HasRequestsContract
{
use GivesApprovals;
use HasRequests;
}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 kryptomienOdoslaní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.