Udělal bych to takto.
table name: permission
columns: id, permission_name
a poté mohu uživateli přiřadit více oprávnění pomocí tabulky vztahů mnoho k mnoha
table name: user_permission
columns: permission_id, user_id
Tento návrh mi umožní přidat tolik oprávnění, kolik chci, a přidělit je tolika uživatelům, kolik chci.
Zatímco výše uvedený návrh odpovídá vašemu požadavku, mám vlastní metodu implementace ACL ve své aplikaci. Zveřejňuji to zde.
Moje metoda implementace ACL vypadá takto:
- Uživateli bude přidělena role (administrátor, host, personál, veřejnost)
- Role bude mít přiřazeno jedno nebo více oprávnění (user_write, user_modify, report_read) atd.
- Oprávnění pro uživatele bude zděděno z role, ve které je
- Uživateli lze přiřadit ruční oprávnění kromě oprávnění zděděných z role.
K tomu jsem přišel s následujícím návrhem databáze.
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 |
+---------------+
To mi dává větší kontrolu nad ACL. Mohu povolit superadminům, aby sami přidělovali oprávnění a tak dále. Jak jsem řekl, je to jen pro představu.