私はこのようにします。
table name: permission
columns: id, permission_name
次に、多対多の関係テーブルを使用して、ユーザーに複数のアクセス許可を割り当てることができます
table name: user_permission
columns: permission_id, user_id
この設計により、必要な数の権限を追加し、必要な数のユーザーに割り当てることができます。
上記の設計は要件に適合しますが、アプリケーションにACLを実装する独自の方法があります。ここに投稿します。
ACLの実装方法は次のようになります:
- ユーザーには役割(管理者、ゲスト、スタッフ、パブリック)が割り当てられます
- ロールには、1つまたは複数の権限(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をより細かく制御できます。スーパー管理者が自分で権限を割り当てることなどを許可できます。私が言ったように、これはあなたにアイデアを与えるためだけのものです。