Ik zou het op deze manier doen.
table name: permission
columns: id, permission_name
en dan kan ik meerdere machtigingen toewijzen aan de gebruiker met behulp van een veel-op-veel-relatietabel
table name: user_permission
columns: permission_id, user_id
Met dit ontwerp kan ik zoveel rechten toevoegen als ik wil en deze aan zoveel gebruikers toewijzen als ik wil.
Hoewel het bovenstaande ontwerp aansluit bij uw vereisten, heb ik mijn eigen methode om ACL in mijn toepassing te implementeren. Ik plaats het hier.
Mijn methode van implementatie van ACL gaat als volgt:
- Gebruiker krijgt een rol toegewezen (beheerder, gast, personeel, openbaar)
- Aan een rol zijn een of meerdere machtigingen toegewezen (user_write, user_modify, report_read) enz.
- Toestemming voor de gebruiker wordt overgenomen van de rol waarin hij/zij is
- Gebruiker kan worden toegewezen met handmatige machtiging, afgezien van de machtiging die is overgenomen van de rol.
Om dit te doen heb ik het volgende database-ontwerp bedacht.
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 |
+---------------+
Dit geeft me meer controle over de ACL. Ik kan superbeheerders toestaan zelf toestemming toe te wijzen, enzovoort. Zoals ik al zei, dit is alleen om je een idee te geven.