Tôi sẽ làm theo cách này.
table name: permission
columns: id, permission_name
và sau đó tôi có thể chỉ định nhiều quyền cho người dùng bằng cách sử dụng nhiều đến nhiều bảng quan hệ
table name: user_permission
columns: permission_id, user_id
Thiết kế này sẽ cho phép tôi thêm nhiều quyền tùy thích và gán quyền đó cho bao nhiêu người dùng tùy ý.
Mặc dù thiết kế trên phù hợp với yêu cầu của bạn, nhưng tôi có phương pháp triển khai ACL trong ứng dụng của mình. Tôi đang đăng nó ở đây.
Phương pháp triển khai ACL của tôi như sau:
- Người dùng sẽ được chỉ định một vai trò (Quản trị viên, khách, nhân viên, công chúng)
- Một vai trò sẽ có một hoặc nhiều quyền được chỉ định cho chúng (user_write, user_modify, report_read), v.v.
- Quyền dành cho Người dùng sẽ được kế thừa từ vai trò của họ
- Người dùng có thể được chỉ định với quyền thủ công ngoài quyền được kế thừa từ vai trò.
Để làm điều này, tôi đã đưa ra thiết kế cơ sở dữ liệu sau.
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 |
+---------------+
Điều này cho phép tôi kiểm soát nhiều hơn ACL. Tôi có thể cho phép các cấp trên tự mình chỉ định quyền, v.v. Như tôi đã nói, đây chỉ là để cung cấp cho bạn ý tưởng.