Pachetul de permisiuni Laravel de la Spatie nu acceptă în mod nativ ierarhia rolului sau moștenirea din cutie. Aceasta înseamnă că nu are funcționalități încorporate pentru definirea relațiilor părinte-copil între rolurile în care un rol părinte moștenește automat toate permisiunile rolurilor sale pentru copii.
Cum se ocupă Spatie roluri și permisiuni
- Rolurile și permisiunile sunt stocate ca entități separate în baza de date.
- Permisiunile sunt alocate direct rolurilor.
- Utilizatorii sunt roluri alocate, iar prin aceste roluri, câștigă permisiunile asociate.
- De asemenea, puteți atribui permisiuni direct utilizatorilor.
- Când verificați permisiunile, pachetul privește toate permisiunile alocate direct utilizatorului, plus cele moștenite prin roluri.
Ierarhia și moștenirea rolului
- Pachetul tratează rolurile ca entități plate fără nicio ierarhie.
- Nu există un mecanism încorporat care să atribuie un rol altuia sau să aibă un „rol părinte” care să moștenească automat toate permisiunile „rolurilor copilului” [1] [4].
- Utilizatorii pot avea mai multe roluri alocate, ceea ce permite flexibilitate în combinarea permisiunilor din diferite roluri, mai degrabă decât să se bazeze pe moștenirea ierarhică [2].
Abordări comune pentru a implementa ierarhia rolului cu Spatie
Întrucât Spatie nu susține moștenirea rolului, dezvoltatorii implementează adesea soluții de rezolvare, cum ar fi:
-Alocarea tuturor permisiunilor în mod explicit rolurilor de nivel superior: în loc să moșteniți permisiunile din rolurile copilului, atribuiți manual toate permisiunile relevante fiecărui rol, inclusiv roluri la nivel superior, cum ar fi „super-admin”, având toate permisiunile de roluri inferioare [2] [5].
- Clasarea rolurilor cu valori întregi: unii dezvoltatori atribuie un rang sau nivel rolurilor (de exemplu, 1 pentru utilizator, 2 pentru moderator, 3 pentru administrator) și apoi implementează logica în cererea lor pentru a acorda permisiuni pe baza rangului de rol al utilizatorului, simulând efectiv ierarhia [2].
- Mai multe roluri pe utilizator: Alocați mai multe roluri utilizatorilor care au nevoie de permisiuni combinate din diferite roluri, evitând nevoia de roluri ierarhice [2].
Rezumat
- Pachetul SPATIE se concentrează pe gestionarea rolurilor și permisiunilor ca entități plate separate.
-Încurajează alocarea permisiunilor direct rolurilor și utilizatorilor fără moștenire de rol în rol.
- Ierarhia de rol și moștenirea trebuie să fie implementate manual dacă este necesar, de obicei prin alocarea permisiunilor în mod explicit sau folosind logica de clasare personalizată.
- Acest design evită probleme potențiale în care permisiunile unui rol părinte depind de rolurile copilului, ceea ce ar putea provoca complexități de securitate sau de gestionare [1] [2] [4].
Astfel, în timp ce Spatie oferă un sistem de permisiuni robuste și flexibile, acesta nu se ocupă de ierarhia de rol și de moștenire internă; Dezvoltatorii trebuie să -și proiecteze propriile strategii pentru a simula un astfel de comportament, dacă este necesar.
Citări:
[1] https://github.com/spatie/laravel-permission/issues/685
[2] https://www.reddit.com/r/laravel/comments/jrhkc9/struggling_to_create_hierchy_of_permissions_in/
[3] https://spatie.be/docs/laravel-permission/v6/introduction
[4] https://stackoverflow.com/questions/67520321/how-to-implement-hierarchical-rbac-inravel
[5] https://www.interserver.net/tips/kb/how-to-implement-role-based-access-control-lravel/
[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-hild-roles-having-different-permisions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-roles-oesnt-signrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies-and-gates-man-manipulare-role-access-1bdn