Qual è un modello di base per creare un database con utenti e gruppi?


9

Sto cercando di trovare il modo migliore per un sistema di sicurezza di base per un sito Web. So che voglio utenti e gruppi.

Ho pensato di avere:

user_table
user_id
user_name
...

group_type
group_id
group_name
parent_id
...

group_table
id
user_id
group_id

Il primo è l'utente, il secondo è il gruppo e il terzo è la tabella intermedia che collega i due. Un utente ha molti gruppi.

Questo suona bene?


Oltre ai nomi. La tua GROUP_TYPEtabella dovrebbe essere denominata GROUPo qualcosa di simile e GROUP_TABLEdovresti fare riferimento sia agli utenti che ai gruppi, poiché è quello che sta collegando.
Adam Musch,

@adam non group_table lo fa con user_id e group_id?
johnny,

4
@AdamMusch Non dovrebbe essere chiamato GROUP, in quanto si tratta di una parola riservata. Le tabelle e le colonne non dovrebbero mai essere nominate con parole riservate
Philᵀᴹ

1
@Phil concordato. Puoi anche nominare una tabella SELECTe un campo in FROMmodo da poter avere una query del tipoSELECT [FROM] FROM [SELECT]
JNK

2
Prova a chiamare le entità di base come "app_user" e "app_role"
ConcernedOfTunbridgeWells

Risposte:


17

Il modo tradizionale di modellarlo è utilizzare un modello chiamato Sicurezza basata sui ruoli .

L'idea non è solo quella di avere gruppi di utenti, ma anche gruppi di autorizzazioni. Ecco come appare il modello:

ERD di sicurezza basato sul ruolo

Nota che vuoi evitare parole riservate per i nomi delle tabelle, quindi non nominare le tue tabelle esattamente come mostrato nel diagramma.

Il modo in cui funziona è che i tuoi gruppi o ruoli non solo hanno un elenco di utenti assegnati a loro, ma anche un elenco di autorizzazioni loro assegnate. Questo ti permette di guidare sia chi può fare cosa, sia quello che può fare se mi segui.


Ma cosa succede se il mio utente ha un ruolo come manager o qualsiasi altra cosa e per qualche ragione anche lo stesso utente ha bisogno di un'autorizzazione particolare (che non è in quel ruolo, né è in nessun altro ruolo da solo)?
levi

@levi - Se ciò accade, un modo per gestirlo è quello di fare un ruolo speciale come "Autorizzazioni speciali di Bob" , che è un po 'un kludge, ma risolve il problema finché non si hanno troppe eccezioni come Questo. È possibile che quella che pensi sia un'eccezione individuale possa in realtà essere un nuovo ruolo sottile che non hai preso in considerazione. Cosa succede quando Bob esce? Anche la sostituzione di Bob ha bisogno di un'autorizzazione eccezionale? In tal caso, hai effettivamente un ruolo con un membro, non un'eccezione.
Joel Brown,

@levi - Un'altra possibilità è che devi davvero avere una combinazione di diritti individuali e di ruolo. In tal caso, la ROLEtabella può essere sottotitolata in tipi individuali e di gruppo , in cui il tipo di gruppo ha zero a molti membri e il tipo individuale ha esattamente un membro. Il modo in cui imponi queste regole di cardinalità dipende da te. Potrebbe essere eseguito in modo dichiarativo nello schema del database, nel qual caso è necessario modificare leggermente lo schema illustrato. Oppure potresti usare la logica dell'applicazione, nel qual caso il tuo schema sembra ancora quello che ho immaginato sopra.
Joel Brown,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.