在權限管理系統開發中,理解資料表之間的關聯與資料流向至關重要。本篇將透過實際插入測試資料,完整演示從模組定義、操作碼配置、角色建立、權限授權到用戶指派的完整資料流程,幫助開發者建立清晰的系統心智模型。
系統採用 7 張核心資料表構建細粒度權限體系:
| 資料表 | 功能描述 | 關鍵關聯 |
|---|---|---|
| SysModule | 功能模組管理(支援無限級樹狀結構) | 根節點 |
| SysUser | 系統用戶基本資料 | 葉節點 |
| SysRole | 角色群組定義 | 橋接用戶與權限 |
| SysModuleOperate | 模組操作碼定義(如 Create、Edit、Delete、Query 等) | 掛載於 SysModule |
| SysRight | 角色-模組授權關聯(角色擁有哪些模組權限) | Role + Module |
| SysRightOperate | 角色-操作碼授權(角色在特定模組擁有哪些操作權限) | Right + Operate |
| SysRoleSysUser | 用戶-角色多對多關聯 | User + Role |
以「樣例程式」模組為例,定義 7 種基本操作:
INSERT INTO [SysModuleOperate] ([Id],[Name],[KeyCode],[ModuleId],[IsValid],[Sort]) VALUES
('BaseSampleCreate','建立','Create','BaseSample',0,0),
('BaseSampleDelete','刪除','Delete','BaseSample',0,0),
('BaseSampleDetails','詳細','Details','BaseSample',0,0),
('BaseSampleEdit','編輯','Edit','BaseSample',0,0),
('BaseSampleExport','匯出','Export','BaseSample',0,0),
('BaseSampleQuery','查詢','Query','BaseSample',0,0),
('BaseSampleSave','儲存','Save','BaseSample',0,0);
說明:ModuleId 對應 SysModule 表的模組 ID,IsValid 表示該操作是否需額外驗證邏輯。
INSERT INTO [SysRole] ([Id],[Name],[Description],[CreateTime],[CreatePerson]) VALUES
('administrator','超級管理員','全部授權','2012-10-01 12:00:00','Administrator');
將「樣例程式」與「BaseSample」兩個模組授權給超級管理員:
INSERT INTO [SysRight] ([Id],[ModuleId],[RoleId],[Rightflag]) VALUES
('administratorSampleFile','SampleFile','administrator',1),
('administratorBaseSample','BaseSample','administrator',1);
Rightflag=1 表示啟用該授權。
這是權限控制的最細粒度層級——將 7 個操作碼全數授權:
INSERT INTO [SysRightOperate] ([Id],[RightId],[KeyCode],[IsValid]) VALUES
('administratorBaseSampleCreate','administratorBaseSample','Create',1),
('administratorBaseSampleDelete','administratorBaseSample','Delete',1),
('administratorBaseSampleDetails','administratorBaseSample','Details',1),
('administratorBaseSampleEdit','administratorBaseSample','Edit',1),
('administratorBaseSampleExport','administratorBaseSample','Export',1),
('administratorBaseSampleQuery','administratorBaseSample','Query',1),
('administratorBaseSampleSave','administratorBaseSample','Save',1);
關鍵邏輯:擁有 Create 操作碼權限的角色,才能在介面上看到「新增」按鈕並執行建立操作。
INSERT INTO [SysUser] ([Id],[UserName],[Password],[TrueName],[MobileNumber],[PhoneNumber],[QQ],[EmailAddress],
[Province],[City],[Village],[Address],[State],[CreateTime],[CreatePerson],[Sex],[Birthday],[JoinDate],
[Marital],[Political],[Nationality],[Native],[School],[Professional],[Degree],[DepId],[PosId],
[Expertise],[JobState],[Photo],[Attach]) VALUES
('admin','admin','01-92-02-3A-7B-BD-73-25-05-16-F0-69-DF-18-B5-00','系統管理員',
NULL,'06638888888','324345345','ymnets@sina.com','MSN:ymnets',
'440000','440100','440101','小小村落',1,'2012-11-18 15:40:00','admin','男',
'1900-05-18','2013-01-01','未婚','中國','中國','廣東揭陽','美國哈佛大學','計算機工程','碩士',
'20000','20001','勤勞向學,為人友善,樂於助人','在職',NULL,NULL);
注意:密碼欄位儲存為加密雜湊值(01-92-02-3A-7B-BD-73-25-05-16-F0-69-DF-18-B5-00),實際驗證時需使用相同加密演算法比對。
INSERT INTO [SysRoleSysUser] ([SysUserId],[SysRoleId]) VALUES ('admin','administrator');
用戶登入 → 讀取 SysRoleSysUser 取得角色 → 讀取 SysRight 取得角色擁有的模組權限 → 讀取 SysRightOperate 取得各模組下的操作碼權限 → 前端依權限動態顯示選單與按鈕 → 後端 Action 透過過濾器驗證操作碼權限
完整專案原始碼已發布於第 17 講,可至 QQ 群共享(37509873)下載。第 17 講留言區另有修正說明,請一併參考。
作者:YmNets
出處:https://ymnets.cnblogs.com/