En réponse à votre première question, le plus gros problème en vérifiant qu'un utilisateur a un rôle plutôt qu'une autorisation spécifique est que les autorisations peuvent être détenues par plusieurs rôles. À titre d’exemple, un développeur peut accéder au portail de développement sur l’intranet de la société, qui est probablement aussi une autorisation détenue par son responsable. Si un utilisateur tente alors d'accéder au portail de développeur, vous devez effectuer une vérification semblable à:
if(SecurityUtils.hasRole(developer)) {
// Grant them access to a feature
} else if(SecurityUtils.hasRole(manager)) {
// Grant them access to a feature
} else if...
(Une switch
déclaration dans la langue de votre choix serait préférable, mais pas très soignée)
Plus une autorisation est courante ou répandue, plus vous aurez besoin de vérifier les rôles d'utilisateur pour vous assurer que quelqu'un est capable d'accéder à un système donné. Cela poserait également le problème suivant: chaque fois que vous modifiez les autorisations pour un rôle, vous devez modifier la vérification en conséquence. Dans un grand système, cela deviendrait très difficile à manier très rapidement.
Si vous vérifiez simplement que l'utilisateur dispose de l'autorisation lui permettant d'accéder au portail de développeur, peu importe le rôle qu'il détient, l'accès lui sera accordé.
Pour répondre à votre deuxième question, vous avez des rôles parce qu’ils permettent de modifier et de distribuer facilement des "packages" d’autorisations. Si votre système possède des centaines de rôles et des milliers d'autorisations, l'ajout d'un nouvel utilisateur (un nouveau responsable des ressources humaines, par exemple) vous obligerait à passer par toutes les autorisations dont disposent les autres responsables des ressources humaines. Non seulement cela serait fastidieux, mais il est sujet à des erreurs s'il est fait manuellement. Comparez cela à simplement ajouter le rôle "HR Manager" au profil d'un utilisateur, ce qui leur donnera le même accès que tous les autres utilisateurs dotés de ce rôle.
Vous pouvez faire valoir que vous pouvez simplement cloner un utilisateur existant (si votre système le permet), mais bien que cela accorde à l'utilisateur les autorisations appropriées pour l'instant, il peut être tentant d'ajouter ou de supprimer une autorisation pour tous les utilisateurs à l'avenir. difficile. Un exemple de scénario: si le personnel des ressources humaines était peut-être également responsable de la paie, mais que l'entreprise devient suffisamment nombreuse pour engager du personnel spécifiquement chargé de la gestion de la masse salariale. Cela signifie que les ressources humaines n'ont plus besoin d'accéder au système de paie, de sorte que l'autorisation peut être supprimée. Si vous avez 10 membres différents de HR, vous devrez passer manuellement et vous assurer que vous supprimez l'autorisation appropriée, ce qui introduit la possibilité d'erreur d'utilisateur. L'autre problème avec ceci est que cela n'échelle tout simplement pas; à mesure que de plus en plus d'utilisateurs gagnent un rôle donné, il est beaucoup plus difficile de modifier un rôle. Comparez cela à l'utilisation de rôles, où il vous suffirait de modifier le rôle global en question pour supprimer l'autorisation, ce qui serait reflété par chaque utilisateur qui détient ce rôle.