實現效果
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 | +----+--------+----------------------------------+----------+------+----------+--------+------------+