RBAC(Role-Based Access Control,基於角色的訪問控制)是目前企業級應用中最主流的權限管理模型。其核心思想極簡單:不直接將權限分配給用戶,而是引入「角色」作為中介層。一個用戶可擁有多個角色,一個角色可包含多個權限,從而構成「用戶-角色-權限」的經典授權模型。在這個模型中,用戶與角色、角色與權限之間通常都是多對多關係,極大地提升了授權的靈活性與可維護性。
角色可理解為一組權限的集合,是權限的載體。以論壇系統為例,「超級管理員」「版主」皆為角色。版主擁有「管理版內帖子」「管理版內用戶」等具體權限。當需要授予某用戶這些權限時,只需將「版主」角色賦予該用戶,而非逐一分配權限。這種間接授權機制,讓權限變更變得極為高效——調整角色所含權限,所有擁有該角色的用戶權限自動更新。
當用戶量龐大時,逐一為用戶分配角色極其繁瑣。引入「用戶組」概念後,可將用戶歸類分組,並對用戶組直接授權。此時,用戶擁有的總權限 = 個人直接擁有的權限 ∪ 所屬用戶組擁有的權限。這種「用戶-用戶組-角色」三層關聯結構,讓批量授權成為可能,顯著降低管理成本。
在實際應用中,權限呈現多樣:功能模塊操作、文件增刪改、菜單訪問、頁面按鈕/圖片可見性控制等。傳統設計常將「功能操作」與「資源(菜單、文件、頁面元素)」分類,形成「用戶-角色-權限-資源」四元模型。但實際開發中,二者界限常模糊(如菜單既是資源又是功能入口)。更優雅的方案是統一建模:所有權限條目均存入權限表,通過「權限類型」字段區分(MENU=菜單、OPERATION=操作、FILE=文件、ELEMENT=頁面元素)。此設計優勢雙重:一、免去權限與資源的艱難區分;二、擴展性極強——新增權限類型只需建立關聯表並定義類型字串即可。
初期設計中,權限表與菜單表通過「權限菜單關聯表」一對一關聯,導致新增菜單需同步寫入三張表。優化後,可省去關聯表,在權限表新增「資源ID」字段,配合「權限類型」直接定位具體資源記錄,簡化操作且不失清晰。
系統龐大時,角色數量激增,引入「角色組」進行分類管理(如電網系統按區局劃分角色),注意角色組不參與授權,純粹為管理便利。同時,菜單樹、功能樹等樹狀結構可輔助主表數據的組織與查找,同樣不參與權限分配邏輯。
本文從基礎 RBAC 模型出發,逐步擴展至用戶組、統一權限建模、關聯表優化、角色組與樹狀結構,構建出一套兼具理論完整性與工程落地性的權限體系。實際項目中仍需根據業務場景靈活裁剪調整。歡迎同行批評指正,共同完善。