Jeg ville gøre det på denne måde.
table name: permission
columns: id, permission_name
og så kan jeg tildele flere tilladelser til brugeren ved hjælp af en mange til mange relationstabel
table name: user_permission
columns: permission_id, user_id
Dette design giver mig mulighed for at tilføje så mange tilladelser, som jeg vil, og tildele det til så mange brugere, som jeg vil.
Mens ovenstående design passer til dit krav, har jeg min egen metode til at implementere ACL i min ansøgning. Jeg poster det her.
Min metode til implementering af ACL går sådan her:
- Brugeren vil blive tildelt en rolle (administrator, gæst, personale, offentlig)
- En rolle vil have en eller flere tilladelser tildelt dem (user_write, user_modify, report_read) osv.
- Tilladelse til brugeren vil blive arvet fra den rolle, som han/hun er til
- Brugeren kan tildeles manuel tilladelse bortset fra den tilladelse, der er arvet fra rollen.
For at gøre dette har jeg fundet på følgende databasedesign.
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 |
+---------------+
Dette giver mig mere kontrol over ACL. Jeg kan tillade superadministratorer selv at tildele tilladelse og så videre. Som sagt er dette bare for at give dig ideen.