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?