Modo corretto per differenziare i tipi di utenti in OO

3

Sto progettando un'applicazione in cui ho utenti e amministratori (più avanti nel futuro, posso avere diversi sottorari, in cui ognuno può accedere ad alcune aree dell'applicazione).

Attualmente, ho una singola classe "User" con un attributo intero "type", che viene controllato quando si accede ad aree riservate.

Questo sembra un "cablaggio" invece di una corretta progettazione, ma non riesco a trovare un modo semplice per implementarlo in OOD: avere una sottoclasse dell'amministratore non è facile da gestire o logica (avrebbe bisogno di controllo del tipo per l'accesso). ..

Mi sbaglio? Qual è il modo corretto per farlo?

    
posta Tiago Sirious 23.10.2016 - 19:25
fonte

2 risposte

2

Con l'aumentare della complessità del sistema è molto probabile che si verifichi la seguente limitazione dell'approccio "level-based" (ad esempio, reader, writer, admin):

L'utente A deve accedere alla funzione X ma non può accedere alla funzione S, ma l'utente B deve accedere alla funzione S ma non può accedere alla funzione X.

Questo può essere risolto assegnando ruoli agli utenti. L'utente A riceverà il ruolo X e l'utente B assumerà il ruolo Y.

Dai un'occhiata al link

Alcune librerie di autorizzazioni, ad es. in ASP.NET hanno il supporto per i ruoli integrati.

    
risposta data 24.10.2016 - 00:47
fonte
1

Questo dipende da quale sarà la differenza funzionale tra Utente e Amministratore. La risposta potrebbe essere che non hai bisogno di tipi di utenti diversi.

Ad esempio, nel framework Web Django, la differenza è nelle autorizzazioni: gli amministratori possono fare tutto. Ma gli utenti non amministratori non sono tutti uguali, gli utenti diversi possono fare cose diverse (ma non necessariamente tutto).

Quindi Django ha un sistema di autorizzazione, in cui gli utenti possono disporre di una serie di permessi e al momento opportuno viene controllato user.has_perm(permission) .

L'Admin viene quindi semplicemente implementato con un singolo flag booleano sul modello User; se is_admin è True, has_perm(permission) restituisce True indipendentemente dal permesso che si sta verificando.

Gli amministratori sono per lo più solo utenti, devono essere in grado di accedere, avere un indirizzo email e così via.

    
risposta data 23.11.2016 - 09:20
fonte

Leggi altre domande sui tag