Saya akan melakukannya dengan cara ini.
table name: permission
columns: id, permission_name
dan kemudian saya dapat menetapkan beberapa izin kepada pengguna menggunakan tabel hubungan banyak ke banyak
table name: user_permission
columns: permission_id, user_id
Desain ini akan memungkinkan saya untuk menambahkan izin sebanyak yang saya inginkan, dan menetapkannya ke pengguna sebanyak yang saya inginkan.
Sementara desain di atas sesuai dengan kebutuhan Anda, saya memiliki metode saya sendiri untuk menerapkan ACL dalam aplikasi saya. Saya mempostingnya di sini.
Metode implementasi ACL saya seperti ini:
- Pengguna akan diberi peran (Admin, tamu, staf, publik)
- Sebuah peran akan memiliki satu atau banyak izin yang ditetapkan padanya (user_write, user_modify, report_read) dll.
- Izin untuk Pengguna akan diwarisi dari perannya
- Pengguna dapat ditetapkan dengan izin manual selain izin yang diwarisi dari peran.
Untuk melakukan ini, saya telah membuat desain database berikut.
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 |
+---------------+
Ini memberi saya lebih banyak kontrol atas ACL. Saya dapat mengizinkan superadmin untuk memberikan izin sendiri, dan seterusnya. Seperti yang saya katakan, ini hanya untuk memberi Anda ide.