Mazanie držiteľov
model_roles a model_permissions sú polymorfné pivoty, preto nemôžu mať cudzí kľúč na tabuľku držiteľa — zmazaním používateľa jeho riadky s priradeniami zostanú. Ak vaša aplikácia niekedy znovu použije primárne kľúče (truncate a nový seed, importy, iné než autoinkrementálne stratégie), nový záznam so starým id by potichu zdedil roly a oprávnenia zmazaného držiteľa. Predídete tomu jedným z dvoch spôsobov.
Odpojenie pri mazaní
Volajte forgetAllAuthorization() z hooku deleting (alebo deleted) modelu — je to skratka pre Permissions::for($model)->forgetAllAuthorization(). Odpojí všetky roly a priame oprávnenia v jednej transakcii a po potvrdení zápisu vyprázdni cache:
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Permissions\Concerns\HasRoles;
class User extends Authenticatable
{
use HasRoles;
protected static function booted(): void
{
static::deleting(fn (self $model) => $model->forgetAllAuthorization());
}
}Prečistenie osirotených riadkov
Alebo pravidelne upratujte. Permissions::pruneOrphans() zmaže riadky pivotov, ktorých model_type + model_id už neukazuje na existujúci model — vrátane riadkov, ktorých morph typ už nezodpovedá žiadnej triede — a vráti počet odstránených riadkov:
use RoundlyConsulting\Permissions\Facades\Permissions;
Permissions::pruneOrphans(); // int — rows deletedPríkaz na prečistenie spraví to isté a vypíše počet:
php artisan permissions:prune-orphansNaplánujte ho, nech beží automaticky:
// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('permissions:prune-orphans')->daily();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.