L'ensemble de l'autorisation Laravel de Spatie ne soutient pas nativement la hiérarchie des rôles ou l'héritage hors de la boîte. Cela signifie qu'il n'a pas de fonctionnalité intégrée pour définir les relations parent-enfant entre les rôles où un rôle parent hérite automatiquement de toutes les autorisations de ses rôles enfants.
Comment Spatie gère les rôles et les autorisations
- Les rôles et les autorisations sont stockés en tant qu'entités distinctes dans la base de données.
- Les autorisations sont attribuées directement aux rôles.
- Les utilisateurs se voient attribuer des rôles, et à travers ces rôles, ils obtiennent les autorisations associées.
- Vous pouvez également attribuer des autorisations directement aux utilisateurs.
- Lors de la vérification des autorisations, le package examine toutes les autorisations attribuées directement à l'utilisateur ainsi que ceux hérités via des rôles.
Hiérarchie et héritage des rôles
- Le package traite les rôles comme des entités plates sans aucune hiérarchie.
- Il n'y a pas de mécanisme intégré pour attribuer un rôle à un autre ou pour avoir un "rôle parent" qui hérite automatiquement de toutes les autorisations de "rôles enfants" [1] [4].
- Les utilisateurs peuvent avoir plusieurs rôles attribués, ce qui permet une flexibilité dans la combinaison des autorisations de différents rôles plutôt que de s'appuyer sur l'héritage hiérarchique [2].
Approches communes pour mettre en œuvre la hiérarchie des rôles avec Spatie
Étant donné que Spatie ne soutient pas l'héritage des rôles, les développeurs mettent souvent en œuvre des solutions de contournement telles que:
- Attribution de toutes les autorisations explicitement à des rôles de niveau supérieur: Au lieu de hériter des autorisations de rôles enfants, vous attribuez manuellement toutes les autorisations pertinentes à chaque rôle, y compris les rôles de niveau supérieur comme "Super-Admin" ayant toutes les autorisations de rôles inférieurs [2] [5].
- Rôles de classement avec des valeurs entières: certains développeurs attribuent un rang ou un niveau à des rôles (par exemple, 1 pour l'utilisateur, 2 pour le modérateur, 3 pour l'administrateur), puis implémenter la logique dans leur application pour accorder des autorisations en fonction du rang de rôle de l'utilisateur, simule efficacement la hiérarchie [2].
- Plusieurs rôles par utilisateur: attribuez plusieurs rôles aux utilisateurs qui ont besoin d'autorisations combinées à partir de différents rôles, en évitant la nécessité de rôles hiérarchiques [2].
Résumé
- Le package de Spatie se concentre sur la gestion des rôles et des autorisations en tant qu'entités plates distinctes.
- Il encourage l'attribution des autorisations directement aux rôles et aux utilisateurs sans héritage de rôle-role.
- La hiérarchie et l'héritage des rôles doivent être implémentés manuellement si nécessaire, généralement en attribuant des autorisations explicitement ou en utilisant la logique de classement personnalisée.
- Cette conception évite les problèmes potentiels où les autorisations d'un rôle parent dépendent des rôles enfants, ce qui pourrait entraîner des complexités de sécurité ou de gestion [1] [2] [4].
Ainsi, alors que Spatie fournit un système d'autorisations robuste et flexible, il ne gère pas la hiérarchie et l'héritage des rôles en interne; Les développeurs doivent concevoir leurs propres stratégies pour simuler un tel comportement si nécessaire.
Citations:
[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-hierarchical-rbac-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-role-basez-Acccess-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-ser-with-child-roles-having-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with- roes-doesnt-asignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-polices-and-gates-handling-role-basés-access-1bdn