Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stockage des autorisations d'application dans une base de données

Je le ferais de cette façon.

table name: permission
columns: id, permission_name

puis je peux attribuer plusieurs autorisations à l'utilisateur à l'aide d'une table de relations plusieurs à plusieurs

table name: user_permission
columns: permission_id, user_id

Cette conception me permettra d'ajouter autant d'autorisations que je le souhaite et de l'attribuer à autant d'utilisateurs que je le souhaite.

Bien que la conception ci-dessus corresponde à vos besoins, j'ai ma propre méthode d'implémentation d'ACL dans mon application. Je le poste ici.

Ma méthode d'implémentation d'ACL ressemble à ceci :

  1. L'utilisateur se verra attribuer un rôle (administrateur, invité, personnel, public)
  2. Un rôle se verra attribuer une ou plusieurs autorisations (user_write, user_modify, report_read) etc.
  3. L'autorisation pour l'utilisateur sera héritée du rôle auquel il/elle est
  4. L'utilisateur peut se voir attribuer une autorisation manuelle en dehors de l'autorisation héritée du rôle.

Pour ce faire, j'ai proposé la conception de base de données suivante.

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 |
+---------------+

Cela me donne plus de contrôle sur l'ACL. Je peux autoriser les superadministrateurs à attribuer eux-mêmes des autorisations, etc. Comme je l'ai dit, c'est juste pour vous donner une idée.