Ich würde es so machen.
table name: permission
columns: id, permission_name
und dann kann ich dem Benutzer mehrere Berechtigungen zuweisen, indem ich eine Viele-zu-Viele-Beziehungstabelle verwende
table name: user_permission
columns: permission_id, user_id
Dieses Design ermöglicht es mir, so viele Berechtigungen hinzuzufügen, wie ich möchte, und sie so vielen Benutzern zuzuweisen, wie ich möchte.
Während das obige Design Ihren Anforderungen entspricht, habe ich meine eigene Methode zur Implementierung von ACL in meiner Anwendung. Ich poste es hier.
Meine Methode zur Implementierung von ACL sieht folgendermaßen aus:
- Benutzer wird eine Rolle zugewiesen (Admin, Gast, Mitarbeiter, Öffentlich)
- Einer Rolle werden eine oder mehrere Berechtigungen zugewiesen (user_write, user_modify, report_read) usw.
- Die Berechtigung für den Benutzer wird von der Rolle übernommen, in der er/sie ist
- Benutzer können mit manueller Berechtigung zugewiesen werden, abgesehen von der Berechtigung, die von der Rolle geerbt wird.
Dazu habe ich mir folgendes Datenbankdesign ausgedacht.
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 |
+---------------+
Dies gibt mir mehr Kontrolle über die ACL. Ich kann Superadmins erlauben, Berechtigungen selbst zu vergeben, und so weiter. Wie gesagt, dies soll Ihnen nur einen Eindruck vermitteln.