Het Laravel -toestemmingspakket van Spatie ondersteunt de rolhiërarchie of erfenis niet native out of the box. Dit betekent dat het geen ingebouwde functionaliteit heeft voor het definiëren van ouder-kindrelaties tussen rollen waarbij een ouderrol automatisch alle machtigingen van zijn kinderrollen erft.
Hoe spatie rolt voor rollen en machtigingen
- Rollen en machtigingen worden opgeslagen als afzonderlijke entiteiten in de database.
- Machtigingen worden rechtstreeks aan rollen toegewezen.
- Gebruikers krijgen rollen toegewezen en door die rollen krijgen ze de bijbehorende machtigingen.
- U kunt ook machtigingen rechtstreeks aan gebruikers toewijzen.
- Bij het controleren van machtigingen kijkt het pakket naar alle rechten die rechtstreeks aan de gebruiker zijn toegewezen plus die geërfd via rollen.
Rolhiërarchie en erfenis
- Het pakket behandelt rollen als platte entiteiten zonder enige hiërarchie.
- Er is geen ingebouwd mechanisme om de ene rol toe te wijzen aan de andere of om een "ouderrol" te hebben die automatisch alle machtigingen van "kinderrollen" [1] [4] erft.
- Gebruikers kunnen meerdere rollen hebben toegewezen, waardoor flexibiliteit mogelijk is bij het combineren van machtigingen uit verschillende rollen in plaats van te vertrouwen op hiërarchische overerving [2].
Gemeenschappelijke benaderingen om rolhiërarchie te implementeren met spatie
Aangezien Spatie geen rol van rollen overstaat, implementeren ontwikkelaars vaak tijdelijke oplossingen zoals:
-Alle machtigingen expliciet toewijzen aan rollen op een hoger niveau: in plaats van machtigingen van kinderrollen te erven, wijst u handmatig alle relevante machtigingen toe aan elke rol, inclusief rollen op een hoger niveau zoals "super-admin" met alle machtigingen van lagere rollen [2] [5].
- Rangschatrollen met gehele waarden: sommige ontwikkelaars geven een rang of niveau toe aan rollen (bijvoorbeeld 1 voor gebruiker, 2 voor moderator, 3 voor admin) en implementeer vervolgens logica in hun toepassing om machtigingen te verlenen op basis van de rol van de gebruiker, waardoor de hiërarchie effectief wordt gesimuleerd [2].
- Meerdere rollen per gebruiker: wijs meerdere rollen toe aan gebruikers die gecombineerde machtigingen uit verschillende rollen nodig hebben, waardoor de behoefte aan hiërarchische rollen wordt vermeden [2].
Samenvatting
- Het pakket van Spatie richt zich op het beheren van rollen en machtigingen als afzonderlijke, platte entiteiten.
-Het moedigt het toewijzen van machtigingen rechtstreeks aan aan rollen en gebruikers zonder rol-to-role erfenis.
- Rolhiërarchie en overerving moeten indien nodig handmatig worden geïmplementeerd, meestal door machtigingen expliciet toe te wijzen of aangepaste ranglijst te gebruiken.
- Dit ontwerp voorkomt potentiële problemen waarbij de machtigingen van een ouder rol afhankelijk zijn van kinderrollen, die beveiligings- of managementcomplexiteit kunnen veroorzaken [1] [2] [4].
Hoewel spatie een robuust en flexibel machtigingssysteem biedt, gaat het dus niet intern om te gaan met rolhiërarchie en overerving; Ontwikkelaars moeten hun eigen strategieën ontwerpen om dergelijk gedrag te simuleren indien nodig.
Citaten:
[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/introduction
[4] https://stackoverflow.com/questions/67520321/how-to-implement-hiërarchical-rbac-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-rool- gebaseerd-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-hiving-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-Roles-Doesnt-assignrol
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies-and-gates-handling-rol-gebaseerde-access-1bdn