Databázová schéma a typy kľúčov
Balík používa päť tabuliek. Ich názvy pochádzajú z table_names; názvy stĺpcov sú pevné:
| Tabuľka | Stĺpce | Kľúče |
|---|---|---|
permissions | id, name (unikátne), description (jsonb, nullable), timestamps | Autoinkrementálne id. |
roles | id, name (unikátne), description (jsonb, nullable), timestamps | Autoinkrementálne id. |
permission_role | permission_id, role_id | Oba cudzie kľúče sa pri zmazaní kaskádujú; primárny kľúč (permission_id, role_id). |
model_roles | role_id, model_type, model_id | role_id sa pri zmazaní kaskáduje; index (model_id, model_type); primárny kľúč (role_id, model_id, model_type). |
model_permissions | permission_id, model_type, model_id | permission_id sa pri zmazaní kaskáduje; index (model_id, model_type); primárny kľúč (permission_id, model_id, model_type). |
Väzby na držiteľov sú polymorfné (model_type + model_id), takže roly a oprávnenia môže držať akýkoľvek Eloquent model — nielen používateľ. Vlastné aliasy z morph mapy sa v pivotoch ukladajú rovnako ako kdekoľvek inde v Laraveli.
Typ kľúča držiteľov
key_type opisuje modely, ktoré držia roly a oprávnenia — nikdy nie vlastné tabuľky balíka, tie majú vždy autoinkrementálny kľúč. Určuje typ stĺpca model_id v dvoch polymorfných pivotoch:
| key_type | Stĺpec model_id | Použite, keď vaši držitelia… |
|---|---|---|
bigint | unsignedBigInteger | používajú predvolené autoinkrementálne kľúče Laravelu (predvolené) |
uuid | uuid | používajú HasUuids |
ulid | ulid | používajú HasUlids |
Nastavte ho pred publikovaním a spustením migrácií — schéma sa vydaním zmrazí:
PERMISSIONS_KEY_TYPE=uuiduse Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Permissions\Concerns\HasRoles;
class User extends Authenticatable
{
use HasRoles;
use HasUuids; // pairs with PERMISSIONS_KEY_TYPE=uuid
}Nenastavený alebo prázdny kľúč znamená bigint; neznáma hodnota vyhodí InvalidConfigurationException z toolkitu, namiesto toho, aby potichu vytvorila kľúče bigint.
Zámerne bez soft deletes
Roly a oprávnenia nepoužívajú soft deletes: unikátny index na name by kolidoval so soft-zmazanými riadkami a každý pivot sa pri zmazaní kaskáduje — odstránením roly či oprávnenia zmiznú aj jeho priradenia.
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.