一、權限控制
1、業務背景
在復雜的業務系統中,權限管理是最基礎的模塊,通過各種授權結構模型,管理用戶在產品中可訪問和可操作的邊界,以實現系統和數據安全管理的目的:
通常在系統的任何層面都會涉及到一定程度的權限管控:
- 頁面層:菜單、組件、操作口;
- 網關層:黑白名單管理、流量控制;
- 控制層:平台、服務、API;
- 數據層:數據庫、業務表、字段;
不同層面的權限管理,用來應對不同場景下的需求,例如:后台系統的頁面,開放平台中的白名單,常規API訪問限制,核心數據的字段維度。
采用合理的策略去管理資源的權限並不是一件簡單的事,通常隨着業務和系統的不斷擴展,對權限體系都會帶來直接的影響,所以在做結構設計時,需要相對復雜但又要避免過度復雜。分布式系統中,通常從系統層、組織架構、權限關系三個方面去考慮可行方案。
2、RBAC模型
在權限控制的模型中,基於角色的訪問控制Role-Based-Access-Control
(簡稱RBAC),是普遍使用的一種模型:
- 模型中三個核心要素:用戶、角色、權限;
- 可以簡化模型,單從用戶層級去管理資源;
- 升級模型結構,做繼承合並或選擇性責任分離;
圍繞RBAC的權限體系,可以精細化管理,相應的結構設計也會復雜,通常用在多業務多場景的分布式系統中,在用戶極少的輕量應用中,會精簡權限管理。
二、組織架構
1、組織模型
常見的組織架構體系如下:
2、角色管理
不同的組織節點對應不同的崗位角色:
在組織架構的層級中,帶來角色層級關系,進而會存在一個用戶具備多個角色的情況,處理策略通常有兩種:
- 角色合並:把用戶所有角色對應的權限點做合並,統一開放;
- 角色分離:即用戶登錄系統之后,根據角色的選擇切換,加載相應權限;
三、資源管理
1、資源層級
系統層級:大型復雜的架構中,會對系統做應用的划分,並且通過控制台做各種通用業務的管理,例如通過控制台管理各個業務應用的賬號開通、服務授權等,從而形成系統層級的結構;這樣可以避免多個應用對基礎功能的重復實現,從設計層面看也更加合理。
資源粒度:設計精細的權限體系,可以靈活的管理資源開放的范圍,大到應用平台的直接開放(平台管理員),小到應用中某個頁面的功能點開放(業務人員),甚至細化到庫表字段級的控制,可以極大的提升數據安全性。
操作類型:通常對資源的操作定義為:增刪改查四個基礎動作,進而產生對數據的影響,轉換到業務中權限的描述語義為:讀、寫、刪,通過對角色與資源的業務定義,從而給到不同的動作授權。
2、授權關聯
- 圍繞組織架構,創建角色與用戶,並形成用戶與角色的綁定關系;
- 定義資源的管理層級,以及相應的操作類型,並形成頁面到數據的鏈路;
- 基於角色主體,綁定對應資源和可操作類型,構建角色的權限集合;
基於組織架構中用戶與角色的關系,角色與資源的操作權限,從而實現用戶對資源管理的控制,其核心原理就是RBAC模型,只是在不同的場景下對不同節點做復雜設計,以更好的適應業務。
在權限體系中,場景多是授權動作少,權限點查詢加載的過程多,所在實現的過程中,可以適當考慮做冗余的表關聯結構,從而簡化查詢的過程。
- 同系列-架構:┃ 微服務組件淺封裝 ┃ Shiro權限組件 ┃ Security安全組件 ┃ OAuth2授權組件 ┃ JWT令牌組件 ┃
四、源代碼地址
應用倉庫:
https://gitee.com/cicadasmile/butte-flyer-parent
組件封裝:
https://gitee.com/cicadasmile/butte-frame-parent