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

Memorizzazione delle autorizzazioni dell'applicazione in un database

Lo farei in questo modo.

table name: permission
columns: id, permission_name

e quindi posso assegnare più autorizzazioni all'utente utilizzando una tabella di relazione molti a molti

table name: user_permission
columns: permission_id, user_id

Questo design mi consentirà di aggiungere tutte le autorizzazioni che voglio e di assegnarle a tutti gli utenti che voglio.

Sebbene il design di cui sopra soddisfi le tue esigenze, ho il mio metodo per implementare ACL nella mia applicazione. Lo pubblico qui.

Il mio metodo di implementazione di ACL è questo:

  1. All'utente verrà assegnato un ruolo (amministratore, ospite, staff, pubblico)
  2. Un ruolo avrà una o più autorizzazioni assegnate (user_write, user_modify, report_read) ecc.
  3. Il permesso per l'Utente sarà ereditato dal ruolo in cui è
  4. L'utente può essere assegnato con autorizzazione manuale a parte l'autorizzazione ereditata dal ruolo.

Per fare ciò ho elaborato il seguente progetto di database.

role
I store the role name here 
+----------+
| Field    |
+----------+
| id       |
| role_name |
+----------+

permission:
I store the permission name and key here 
Permission name is for displaying to user.
Permission key is for determining the permission.
+----------------+
| Field          |
+----------------+
| id             |
| permission_name |
| permission_key  |
+----------------+

role_permission
I assign permission to role here 
+---------------+
| Field         |
+---------------+
| id            |
| role_id       |
| permission_id |
+---------------+

user_role
I assign role to the user here 
+---------------+
| Field         |
+---------------+
| id            |
| user_id       |
| role_id       |
+---------------+

user_permission
I store the manual permission I may allow for the user here 
+---------------+
| Field         |
+---------------+
| id            |
| user_id       |
| permission_id |
+---------------+

Questo mi dà un maggiore controllo sull'ACL. Posso consentire ai super amministratori di assegnare autorizzazioni da soli e così via. Come ho detto questo è solo per darti l'idea.