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

Každá metóda, ktorá prijíma názov, akceptuje reťazec alebo BackedEnum, takže môžete používať vlastné enumy oprávnení a rolí (ukladá sa ->value):

use RoundlyConsulting\Enums\Helpers;

enum PermissionName: string
{
    use Helpers;

    case ViewUsers = 'auth.users.view';
    case EditUsers = 'auth.users.edit';
}

Permissions::for($role)->givePermissionTo(PermissionName::ViewUsers);
Permissions::exists(PermissionName::ViewUsers);
$user->hasPermissionTo(PermissionName::ViewUsers);

Trait Helpers z balíka enums-for-laravel je voliteľný — funguje akýkoľvek backed enum v PHP.

Roly a oprávnenia ako enumy

Prípady enumu prijímajú Permissions::role() a permission(), každá metóda na udeľovanie a priraďovanie, kontroly aj Permissions::exists():

use RoundlyConsulting\Permissions\Facades\Permissions;

enum RoleName: string
{
    case Administrator = 'administrator';
    case Editor = 'editor';
}

Permissions::permission(PermissionName::ViewUsers);
Permissions::for(Permissions::role(RoleName::Editor))->givePermissionTo(PermissionName::ViewUsers);

Permissions::for($user)->assignRole(RoleName::Editor);
$user->hasRole(RoleName::Editor);                   // true
$user->hasPermissionTo(PermissionName::ViewUsers);  // true
Permissions::exists(PermissionName::ViewUsers);     // true

V middlewari rout

Do reťazca middlewaru vložte hodnotu enumu:

Route::get('/users', UsersController::class)
    ->middleware('can:'.PermissionName::ViewUsers->value);

Seedovanie z enumu

Enum nech je jediným zdrojom pravdy — všetky jeho prípady zaregistrujete jedným volaním zo seedera, kroku nasadenia či service providera. syncFrom() registruje oprávnenia, syncRolesFrom() roly a obe vrátia SyncResult:

use RoundlyConsulting\Permissions\Facades\Permissions;

$result = Permissions::syncFrom(PermissionName::class);
$result->created;   // ['auth.users.edit'] — names registered now
$result->existing;  // ['auth.users.view'] — names that were already there
$result->changed(); // true

Permissions::syncRolesFrom(RoleName::class); // the same, for roles

Synchronizácia je aditívna: nikdy nezmaže ani nepremenuje riadok, ktorý enum neobsahuje, pretože v tých istých tabuľkách si môžu registrovať oprávnenia aj iné služby. Riadky vznikajú cez vaše nastavené modely, takže sa cache invaliduje sama. Čokoľvek iné než backed enum vyhodí PermissionException.

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.