三表構成許可權關聯,在PHP應該是最簡單的許可權設計方案了:
ps:如果有同學也想要聯絡,避免重複造輪子,我可以提供下面sql檔案哦!
1、選單管理
2、角色管理
3、使用者管理
Mysql表設計:
s_menu 選單表
+————+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| pid | int(11) | YES | | 0 | |父級id
| crd | int(11) | YES | | 0 | |排序
| title | varchar(20) | YES | | NULL | |名稱
| controller | varchar(30) | YES | | NULL | |控制器
| method | varchar(30) | YES | | NULL | |方法
| ishidden | tinyint(1) | YES | | 0 | |0:顯示 1:隱藏
| status | tinyint(1) | YES | | 0 | |0:正常 1:禁用
| type | tinyint(1) | YES | | 0 | |0:系統1 1:系統2(如果單個系統則不需要此欄位)
+————+——————+——+—–+———+—————-+s_group 角色表
+——–+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——–+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(30) | YES | | NULL | |角色標題
| rights | text | YES | | NULL | |許可權組,存s_menu表id的json陣列
+——–+——————+——+—–+———+—————-+s_user 使用者表
+———-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| user | varchar(20) | YES | | NULL | |使用者名稱
| pass | varchar(100) | YES | | NULL | |密碼
| truename | varchar(20) | YES | | NULL | |真實姓名
| gid | int(11) unsigned | YES | | NULL | |角色表 id
| gid_view | int(11) unsigned | YES | | NULL | |角色表2 id(意思是一個使用者擁有兩套系統的角色許可權,如果單個系統則不需要此欄位)
| status | tinyint(4) | NO | | 0 | |使用者狀態 0:正常 1:禁用
| add_time | int(11) | YES | | NULL | |新增時間
+———-+——————+——+—–+———+—————-+
原理:
s_menu表間儲存類檔案的控制器、方法、選單名稱,子級選單的pid為父級選單的id進行儲存,一級選單pid預設為0,便於自定義選單的遍歷渲染
+—-+——+——+—————+————+——–+———-+——–+——+
| id | pid | crd | title | controller | method | ishidden | status | type |
+—-+——+——+—————+————+——–+———-+——–+——+
| 1 | 0 | 7 | 安全 | | | 0 | 0 | 0 |
| 2 | 1 | 0 | 使用者管理 | User | index | 0 | 0 | 0 |
| 3 | 1 | 1 | 角色管理 | Role | index | 0 | 0 | 0 |
| 4 | 1 | 2 | 表單-選單管理 | Menu | index | 0 | 0 | 0 |
| 5 | 2 | 0 | 使用者新增 | User | add | 1 | 0 | 0 |
| 6 | 2 | 0 | 使用者儲存 | User | save | 1 | 0 | 0 |
| 7 | 2 | 0 | 使用者編輯 | User | edit | 1 | 0 | 0 |
| 8 | 2 | 0 | 使用者修改 | User | update | 1 | 0 | 0 |
| 9 | 2 | 0 | 使用者刪除 | User | delete | 1 | 0 | 0 |
| 10 | 3 | 0 | 角色新增 | Role | add | 1 | 0 | 0 |
+—-+——+——+—————+————+——–+———-+——–+——+如:安全下面有【使用者管理】、【角色管理】、【表彰-選單管理】3個子選單
s_group表將多個s_menu_id形成json陣列繫結角色名稱
+—-+———-+—————————————————————————–+
| id | title | rights |
+—-+———-+—————————————————————————–+
| 12 | 視覺設計 | [46,51,59,60,67,92,126,127,272,273,213,214,215,263,268,271,275,317,318,264] |
| 14 | 財務 | [92,126,127,212,113,115,226,216,217,263,268,264] |
+—-+———-+—————————————————————————–+s_user繫結有角色組的id,當php登入後獲取使用者表id,就可查詢到是否有當前訪問的控制器的方法許可權
+—-+——–+———————————-+———-+——+———-+——–+————+
| id | user | pass | truename | gid | gid_view | status | add_time |
+—-+——–+———————————-+———-+——+———-+——–+————+
| 1 | xxx | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxx | 1 | 2 | 0 | 1236456622 |
| 12 | xxx | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxx | 7 | 4 | 0 | 1546313958 |
| 13 | xxx | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxx | 9 | 4 | 0 | 1546313989 |
| 14 | xxx | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxx | 10 | 3 | 0 | 1546314013 |
| 15 | xxx | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxx | 16 | 3 | 0 | 1546314060 |
+—-+——–+———————————-+———-+——+———-+——–+————+
本作品採用《CC 協議》,轉載必須註明作者和本文連結