我会这样做。
table name: permission
columns: id, permission_name
然后我可以使用多对多关系表为用户分配多个权限
table name: user_permission
columns: permission_id, user_id
这种设计将允许我添加任意数量的权限,并将其分配给任意数量的用户。
虽然上述设计符合您的要求,但我有自己的方法在我的应用程序中实现ACL。我在这里发布它。
我的 ACL 实现方法如下:
- 将为用户分配一个角色(管理员、来宾、员工、公共)
- 角色将分配有一个或多个权限(user_write、user_modify、report_read)等。
- 用户的权限将从他/她所在的角色继承
- 除了从角色继承的权限之外,还可以为用户分配手动权限。
为此,我提出了以下数据库设计。
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 |
+---------------+
这使我能够更好地控制 ACL。我可以允许超级管理员自己分配权限,依此类推。正如我所说,这只是为了给你这个想法。