Supponiamo di avere un permissionManager
che ci dice se l'utente ha alcuni privilegi per qualche azione o meno. Ne abbiamo parecchio (dozzine, forse più).
Vedo due modi per implementare i controlli per un utente, ad esempio:
-
Metodo dedicato:
permissionManager.canAdminister(user);
-
Metodo con un parametro:
permissionManager.hasPermission(Permissions.ADMINISTER, user);
(dove Permissions
è una classe con un gruppo di campi statici per ogni autorizzazione o uno spazio dei nomi con costanti globali)
Ci sono pro e contro in entrambi i modi, vedo questi:
-
Metodo dedicato
-
Il monitoraggio degli utilizzi e l'aggiunta di ulteriore registrazione / validazione / ecc. al metodo è più semplice (è sufficiente modificare il metodo specifico).
-
Nessuna entità aggiuntiva e variabili globali.
-
-
Metodo con un parametro:
-
Più controlli per le autorizzazioni è più semplice (solo un ciclo con convalida sequenziale di ogni autorizzazione).
-
Possibilità di avere una combinazione di permessi (bit o stile
ADMINISTER | VIEW
).
-
Qualche cons / pro aggiuntivo per ogni implementazione?
Cosa è più gestibile e preferibile?
PS. forse spostare la funzionalità a User
è ancora meglio, come: user.hasPermission(Permissions.ADMINISTER)
ma questo si rompe Principio di responsabilità singola.