Pakiet uprawnień Laravela Spatie nie obsługuje natywnie hierarchii ról ani dziedziczenia po wyjęciu z pudełka. Oznacza to, że nie ma wbudowanej funkcjonalności definiowania relacji rodzic-dziecko między rolami, w których rola nadrzędna automatycznie dziedzicza wszystkie uprawnienia swoich ról dla dzieci.
Jak spatie obsługuje role i uprawnienia
- Role i uprawnienia są przechowywane jako osobne jednostki w bazie danych.
- Uprawnienia są przypisywane bezpośrednio do ról.
- Użytkownicy przypisują role, a dzięki tym ról uzyskują powiązane uprawnienia.
- Możesz także przypisać uprawnienia bezpośrednio użytkownikom.
- Podczas sprawdzania uprawnień pakiet patrzy na wszystkie uprawnienia przypisane bezpośrednio użytkownikowi oraz odziedziczone za pomocą ról.
hierarchia ról i dziedzictwo
- Pakiet traktuje role jako płaskie byty bez żadnej hierarchii.
- Nie ma wbudowanego mechanizmu przypisania jednej roli drugiej lub odgrywania „roli nadrzędnej”, która automatycznie dziedziczy wszystkie uprawnienia „ról dziecięcych” [1] [4].
- Użytkownicy mogą mieć przypisane wiele ról, co pozwala na elastyczność w łączeniu uprawnień z różnych ról, a nie poleganie na dziedziczeniu hierarchicznym [2].
Wspólne podejścia do wdrożenia hierarchii ról ze spatie
Ponieważ Spatie nie obsługuje dziedziczenia ról, programiści często wdrażają obejścia, takie jak:
-Już w przypisaniu wszystkich uprawnień do ról wyższego szczebla: Zamiast dziedziczenia uprawnień z ról dziecięcych, ręcznie przypisujesz wszystkie istotne uprawnienia do każdej roli, w tym role wyższego poziomu, takie jak „super-admin” o wszystkich uprawnieniach niższych ról [2] [5].
- role rankingowe z wartościami liczb całkowitych: Niektórzy programiści przypisują role lub poziom do ról (np. 1 dla użytkownika, 2 dla moderatora, 3 dla administratora), a następnie wdrażają logikę w ich aplikacji, aby udzielić uprawnień w oparciu o rangę roli użytkownika, skutecznie symulując hierarchię [2].
- Wiele ról na użytkownika: Przypisz wiele ról użytkownikom, którzy potrzebują połączonych uprawnień z różnych ról, unikając potrzeby hierarchicznych ról [2].
Streszczenie
- Pakiet Spatie koncentruje się na zarządzaniu ról i uprawnieniami jako osobnymi, płaskimi jednostkami.
-Zachęca do przypisywania uprawnień bezpośrednio do ról i użytkowników bez dziedziczenia od roli do roli.
- Hierarchia ról i dziedzictwo należy w razie potrzeby zaimplementować ręcznie, zazwyczaj poprzez jawne przypisanie uprawnień lub przy użyciu niestandardowej logiki rankingu.
- Ten projekt pozwala uniknąć potencjalnych problemów, w których uprawnienia do roli rodzica zależą od ról dzieci, co może powodować złożoność bezpieczeństwa lub zarządzania [1] [2] [4].
Tak więc, podczas gdy Spatie zapewnia solidny i elastyczny system uprawnień, nie obsługuje on hierarchii roli i dziedziczenia wewnętrznie; W razie potrzeby programiści muszą opracować własne strategie symulacji takiego zachowania.
Cytaty:
[1] https://github.com/spatie/Laravel-permission/issues/685
[2] https://www.reddit.com/r/Laravel/comments/jrhkc9/struggling_to_create_hierarchy_of_permissions_in/
[3] https://spatie.be/docs/Laravel-permission/v6/Introdukcja
[4] https://stackoverflow.com/questions/67520321/how-to-implement-hierarchical-rbac-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-role-access-control-in-laravel/
[6] https://www.reddit.com/r/LaraVel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[7] https://www.youtube.com/watch?v=3HSBJCVWH78
[8] https://spatie.be/docs/Laravel-permission/v6/basic-usage/Role-permissions
[9] https://stackoverflow.com/questions/78213905/hierarchical-roles-for-a-user-with-child-ress-having-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-doesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies-andgates-gates-role-access-1bdn