首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL 用戶權限管理系統設計:基於 RBAC 的可擴展數據模型與實現邏輯

     編輯:關於SqlServer

B/S 系統中權限控制是安全基石。不同於 C/S 可靠客戶端攔截,B/S 必須在服務端構建完整的基於角色的訪問控制 (RBAC) 模型。本文深度解析一套經典的權限管理系統數據庫設計,採用三實體表 + 兩映射表 + 一分欄表 結構,實現「組」授權、動態菜單、跨系統復用,附帶完整 ER 邏輯、關鍵查詢與擴展策略。

核心需求分析

  1. 職責隔離: 不同崗位擁有差異化操作權限。
  2. 組授權: 權限分配給「組」,用戶歸屬組,避免逐人配置。
  3. 跨系統復用: 權限模型作為獨立組件,可插拔接入任意 MIS 系統。
  4. 功能權限與資源權限分離: 功能權限 (菜單/按鈕) 可復用,資源權限 (數據範圍) 業務專屬。
  5. 動態菜單分欄: 左側導航欄按權限分組動態渲染。

數據庫 ER 設計 (六表核心)

三大實體表

表名邏輯名核心字段業務含義
action權限表id (PK), action (UK), description, actioncolumnid (FK)系統中最小操作單元 (如「用戶新增」、「報表導出」),action 為業務唯一鍵,永不變更
groupmanager管理組表groupid (PK), groupname, description角色/組定義 (如「超級管理員」、「財務組」)
master人員表id (PK), username, password, realname, email系統用戶/管理員

兩大映射表 (解決多對多)

表名邏輯名核心字段映射關係
actiongroup權限映射表groupid (FK), action (FK→action.action)組 ↔ 權限:一組擁有多權限,一權限屬於多組
mastergroup人員映射表masterid (FK), groupid (FK)人 ↔ 組:一人歸屬多組,一組包含多人

關鍵設計決策: actiongroup 使用 action (業務代碼) 而非 action.id (代理鍵) 關聯 action 表。因 id 可能因重構/遷移變更,導致映射失效;action 為業務標識,生命週期穩定,保證映射永不失效。

一分欄表 (動態菜單渲染)

表名邏輯名核心字段作用
actioncolumn權限分欄表actioncolumnid (PK), columnname, displayorder左側菜單一級分組 (如「系統管理」、「業務查詢」、「報表中心」),action 通過 actioncolumnid 歸屬分欄

核心業務查詢邏輯

1. 獲取用戶所有有效權限 (登錄時加載)

SELECT DISTINCT a.action, a.description, a.actioncolumnid
FROM master m
JOIN mastergroup mg ON m.id = mg.masterid
JOIN actiongroup ag ON mg.groupid = ag.groupid
JOIN action a ON ag.action = a.action
WHERE m.username = @CurrentUser;

2. 獲取用戶菜單分欄結構 (前端渲染)

SELECT ac.actioncolumnid, ac.columnname, ac.displayorder,
       a.action, a.description
FROM actioncolumn ac
JOIN action a ON ac.actioncolumnid = a.actioncolumnid
JOIN actiongroup ag ON a.action = ag.action
JOIN mastergroup mg ON ag.groupid = mg.groupid
JOIN master m ON mg.masterid = m.id
WHERE m.username = @CurrentUser
ORDER BY ac.displayorder, a.action;

3. 權限檢查點 (頁面/按鈕級攔截)

-- 應用層緩存用戶權限集合 (Set userActions)
IF @RequestedAction IN (userActions)
    ALLOW;
ELSE
    DENY; -- 403 或友好提示

為何此設計實現「可擴展/可復用」

維度設計特徵復用價值
結構不變三實體 (權限/組/人) 為任何業務系統不變元素新系統無需建表,僅導入數據
關係外置兩映射表純記錄關係,無業務邏輯關係變更僅增刪改數據,零代碼修改
分欄配置化菜單結構數據驅動,非硬編碼調整導航結構只改 actioncolumn 數據
業務鍵映射actiongroup 用 action 非 id 關聯跨環境部署 (開發/測試/生產) ID 不一致也能正常工作

擴展策略:應對複雜業務演進

  1. 資源級權限 (數據範圍): 新增 resource_permission 表 (masterid, resource_type, resource_id, permission_level),獨立於功能權限體系。
  2. 組織架構同步: 引入 department, position 表,mastergroup 增加 dept_id, position_id 支援按部門/崗位批量授權。
  3. 臨時授權/委派: actiongroup / mastergroup 增加 valid_from, valid_to, delegated_from_masterid 字段。
  4. 審計日誌: 記錄 permission_audit_log (operator, target_user, action, old_value, new_value, timestamp)。
  5. 微服務化拆分: 權限服務獨立部署,提供 gRPC/REST API (CheckPermission(user, action), GetUserMenus(user)),各業務服務調用。

總結

此權限模型以 action (權限)、groupmanager (組)、master (人) 三實體為核心骨架,actiongroup、mastergroup 兩映射表編織動態關係網,actioncolumn 賦予前端渲染語義。其精髓在於:結構固化業務不變量,數據驅動業務變量,業務鍵保護映射穩定性。將此六表結構封裝為獨立「權限組件庫」(含遷移腳本、API SDK、管理後台),即可在任意 MIS 專案中實現零開發接入、分鐘級上線 的企業級權限體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved