Backed enumy
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); // trueV 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 rolesSynchronizá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 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.