In risposta alla tua prima domanda, il problema più grande nel verificare che un utente abbia un ruolo anziché un'autorizzazione specifica è che le autorizzazioni possono essere detenute da più ruoli. A titolo di esempio, uno sviluppatore potrebbe avere accesso per vedere il portale degli sviluppatori sull'intranet aziendale, che è probabilmente anche un'autorizzazione detenuta dal proprio manager. Se un utente sta quindi tentando di accedere al portale per sviluppatori, avresti un controllo simile a:
if(SecurityUtils.hasRole(developer)) {
// Grant them access to a feature
} else if(SecurityUtils.hasRole(manager)) {
// Grant them access to a feature
} else if...
( switch
Un'affermazione nella tua lingua preferita sarebbe migliore, ma ancora non particolarmente ordinata)
Più un'autorizzazione è diffusa o diffusa, più ruoli utente dovresti verificare per garantire che qualcuno sia in grado di accedere a un determinato sistema. Ciò porterebbe anche al problema che ogni volta che si modificano le autorizzazioni per un ruolo, è necessario modificare il controllo per riflettere questo. In un sistema di grandi dimensioni questo diventerebbe molto ingombrante molto rapidamente.
Se si verifica semplicemente che l'utente disponga dell'autorizzazione che consente ad esempio l'accesso al portale per sviluppatori, non importa quale ruolo ricoprono, gli verrà concesso l'accesso.
Per rispondere alla tua seconda domanda, il motivo per cui hai ruoli è perché agiscono come facili da modificare e distribuire "pacchetti" di autorizzazioni. Se si dispone di un sistema con centinaia di ruoli e migliaia di autorizzazioni, l'aggiunta di un nuovo utente (ad esempio un nuovo gestore delle risorse umane) richiederebbe di passare attraverso e dare loro ogni singola autorizzazione detenuta da altri gestori delle risorse umane. Questo non solo sarebbe noioso, ma è soggetto a errori se fatto manualmente. Confrontalo semplicemente aggiungendo il ruolo di "Responsabile risorse umane" al profilo di un utente, che garantirà loro lo stesso accesso di tutti gli altri utenti con quel ruolo.
Potresti sostenere che potresti semplicemente clonare un utente esistente (se il tuo sistema lo supporta), ma mentre ciò concede all'utente le autorizzazioni corrette per quel momento nel tempo, tentare di aggiungere o rimuovere un'autorizzazione per tutti gli utenti in futuro potrebbe essere difficile. Uno scenario di esempio per questo è se forse in passato anche il personale delle risorse umane era responsabile della gestione stipendi, ma in seguito l'azienda diventa abbastanza grande da assumere personale specificamente per gestire le buste paga. Ciò significa che le risorse umane non devono più accedere al sistema di gestione stipendi, pertanto è possibile rimuovere l'autorizzazione. Se hai 10 membri diversi di risorse umane, dovrai passare manualmente e assicurarti di rimuovere l'autorizzazione corretta che introduce la possibilità di errore dell'utente. L'altro problema con questo è che semplicemente non si ridimensiona; man mano che guadagni sempre più utenti in un determinato ruolo, diventa molto più difficile modificare un ruolo. Confrontalo con l'utilizzo dei ruoli, in cui dovrai solo modificare il ruolo generale in questione per rimuovere l'autorizzazione, che sarebbe riflessa da ogni utente che detiene quel ruolo.