Qual è il modo migliore per strutturare le mie tabelle delle autorizzazioni web?

3

Voglio impostare le "autorizzazioni" di base per un sito web. Ha un sistema di "ruoli" di base in cui gli utenti fanno parte di determinati gruppi e ottengono tutte le autorizzazioni permesse a quel gruppo. Tuttavia, ho bisogno di più di un semplice Role , Permission e Role_Permission setup perché voglio consentire eccezioni specifiche - alcuni utenti potrebbero avere accesso a permessi aggiuntivi (anche se non sono concessi a nessuno dei loro "ruoli" ") e a determinati utenti potrebbero essere negati i permessi specifici anche se il loro" ruolo "ha accesso ad essi. Fondamentalmente, voglio che sia completamente flessibile e personalizzabile ma ancora astratto e riutilizzabile.

Questa è la struttura di base delle tabelle:

Permission

PermissionID

PermissionName

Role

RoleID

RoleName

Role_Permission

PermissionID

RoleID

User_Role

UserID

RoleID

Ora ho bisogno di un modo per consentire "override" in modo che un utente specifico possa essere autorizzato / negato un permesso specifico. Devo creare 2 tabelle separate, una per le autorizzazioni negate e una per le consentite? O dovrei creare una singola tabella User_Permission? In caso affermativo, dovrebbe avere 2 flag separati per consentire / negare o un singolo campo? Sto pensando di avere qualcosa del genere:

User_Permission

(or should it be called PermissionException? PermissionOverride?)

UserID

PermissionID

Allow (bit flag)

Deny (bit flag)

(Ho quindi intenzione di scrivere una procedura memorizzata SQL hasPermission(UserID, PermissionID) che verrebbe chiamata per determinare se questo utente ha il permesso di eseguire un'azione.)

È un buon design? C'è un modo in cui può essere migliorato? Qual è lo standard generale utilizzato per l'implementazione di questo modello di progettazione comune?

    
posta froadie 15.03.2017 - 04:34
fonte

1 risposta

1

Puoi pensare alla sicurezza da 2 punti di vista: Sicurezza funzionale e sicurezza dei dati.

Sicurezza funzionale: Ciò fornirà il controllo degli accessi su varie funzionalità del tuo sito web. La forma più semplice di questo sarà quella che hai menzionato, i privilegi associati a funzionalità singole come la gestione degli utenti o la gestione dei prodotti ecc., Aggregati per creare ruoli applicativi come Product Manager o HR Manager.

Sicurezza dei dati:

Questo controllerà quali dati (in pratica righe logiche) dovrebbero essere disponibili per ogni sovvenzione funzionale. Ad esempio, se si desidera limitare la funzionalità Gestione utenti per reparto, è possibile impostare un ruolo di sicurezza dei dati per-dept. Questo ruolo, insieme al ruolo di utente amministratore, fornisce all'utente l'accesso a Gestire le funzionalità degli utenti all'interno del suo dipartimento.

Se vuoi concedere direttamente i privilegi agli utenti, sarà sicuramente disordinato e ucciderà le possibilità di aggregazione. Ma puoi implementarlo, poiché i ruoli saranno sempre convertiti in privilegi in fase di esecuzione. Creerà solo un altro livello inutilmente, e anche dal punto di vista dell'usabilità, più confuso da gestire.

    
risposta data 17.03.2017 - 12:11
fonte

Leggi altre domande sui tag