Zrobiłbym to w ten sposób.
table name: permission
columns: id, permission_name
a następnie mogę przypisać użytkownikowi wiele uprawnień, korzystając z tabeli relacji wiele do wielu
table name: user_permission
columns: permission_id, user_id
Ten projekt pozwoli mi dodać tyle uprawnień, ile chcę i przypisać je do dowolnej liczby użytkowników.
Chociaż powyższy projekt jest zgodny z twoimi wymaganiami, mam własną metodę implementacji ACL w mojej aplikacji. Publikuję to tutaj.
Moja metoda implementacji ACL wygląda następująco:
- Użytkownikowi zostanie przypisana rola (administrator, gość, personel, publiczny)
- Rola będzie miała przypisane jedno lub wiele uprawnień (user_write, user_modify, report_read) itp.
- Uprawnienie dla Użytkownika zostanie odziedziczone z roli, którą on/ona jest
- Użytkownikowi można przypisać uprawnienia ręczne oprócz uprawnień odziedziczonych z roli.
W tym celu opracowałem następujący projekt bazy danych.
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 |
+---------------+
Daje mi to większą kontrolę nad listą ACL. Mogę pozwolić superadministratorom na samodzielne przypisywanie uprawnień i tak dalej. Jak powiedziałem, to tylko po to, by dać ci pomysł.