Mysql
 sql >> Database >  >> RDS >> Mysql

Autorizzazioni di implementazione basate sulla reputazione

user_table
id, etc

permission table
id, user_id, permission_type

con questa struttura, ogni utente potrebbe avere diversi tipi di autorizzazione associati al proprio account, uno per ogni insieme di funzionalità che potrebbe avere accesso a. non avresti mai bisogno di modificare la struttura della tabella per aggiungere nuovi tipi di autorizzazioni.

per fare un ulteriore passo avanti, puoi rendere ogni tipo di autorizzazione un numero binario. in questo modo potresti fare in modo che un insieme di autorizzazioni sia rappresentato da un numero intero utilizzando operatori bit per bit.

per esempio se avessi le costanti

PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4

potresti combinare questi valori in un numero intero usando un operatore bit per bit "|"

(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions

quindi per verificare se dispongono di un'autorizzazione specifica, utilizzare l'operatore bit per bit "&"

($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true

se lo facessi, avresti bisogno solo di un record db per ogni set di autorizzazioni.