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 :
- L'utilisateur se verra attribuer un rôle (administrateur, invité, personnel, public)
- Un rôle se verra attribuer une ou plusieurs autorisations (user_write, user_modify, report_read) etc.
- L'autorisation pour l'utilisateur sera héritée du rôle auquel il/elle est
- 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.