分散式系統中,許可權設計實踐

知了一笑發表於2021-12-06

一、許可權控制

1、業務背景

在複雜的業務系統中,許可權管理是最基礎的模組,通過各種授權結構模型,管理使用者在產品中可訪問和可操作的邊界,以實現系統和資料安全管理的目的:

通常在系統的任何層面都會涉及到一定程度的許可權管控:

  • 頁面層:選單、元件、操作口;
  • 閘道器層:黑白名單管理、流量控制;
  • 控制層:平臺、服務、API;
  • 資料層:資料庫、業務表、欄位;

不同層面的許可權管理,用來應對不同場景下的需求,例如:後臺系統的頁面,開放平臺中的白名單,常規API訪問限制,核心資料的欄位維度。

採用合理的策略去管理資源的許可權並不是一件簡單的事,通常隨著業務和系統的不斷擴充套件,對許可權體系都會帶來直接的影響,所以在做結構設計時,需要相對複雜但又要避免過度複雜。分散式系統中,通常從系統層、組織架構、許可權關係三個方面去考慮可行方案。

2、RBAC模型

在許可權控制的模型中,基於角色的訪問控制Role-Based-Access-Control(簡稱RBAC),是普遍使用的一種模型:

  • 模型中三個核心要素:使用者、角色、許可權;
  • 可以簡化模型,單從使用者層級去管理資源;
  • 升級模型結構,做繼承合併或選擇性責任分離;

圍繞RBAC的許可權體系,可以精細化管理,相應的結構設計也會複雜,通常用在多業務多場景的分散式系統中,在使用者極少的輕量應用中,會精簡許可權管理。

二、組織架構

1、組織模型

常見的組織架構體系如下:

2、角色管理

不同的組織節點對應不同的崗位角色:

在組織架構的層級中,帶來角色層級關係,進而會存在一個使用者具備多個角色的情況,處理策略通常有兩種:

  • 角色合併:把使用者所有角色對應的許可權點做合併,統一開放;
  • 角色分離:即使用者登入系統之後,根據角色的選擇切換,載入相應許可權;

三、資源管理

1、資源層級

系統層級:大型複雜的架構中,會對系統做應用的劃分,並且通過控制檯做各種通用業務的管理,例如通過控制檯管理各個業務應用的賬號開通、服務授權等,從而形成系統層級的結構;這樣可以避免多個應用對基礎功能的重複實現,從設計層面看也更加合理。

資源粒度:設計精細的許可權體系,可以靈活的管理資源開放的範圍,大到應用平臺的直接開放(平臺管理員),小到應用中某個頁面的功能點開放(業務人員),甚至細化到庫表欄位級的控制,可以極大的提升資料安全性。

操作型別:通常對資源的操作定義為:增刪改查四個基礎動作,進而產生對資料的影響,轉換到業務中許可權的描述語義為:讀、寫、刪,通過對角色與資源的業務定義,從而給到不同的動作授權。

2、授權關聯

  • 圍繞組織架構,建立角色與使用者,並形成使用者與角色的繫結關係;
  • 定義資源的管理層級,以及相應的操作型別,並形成頁面到資料的鏈路;
  • 基於角色主體,繫結對應資源和可操作型別,構建角色的許可權集合;

基於組織架構中使用者與角色的關係,角色與資源的操作許可權,從而實現使用者對資源管理的控制,其核心原理就是RBAC模型,只是在不同的場景下對不同節點做複雜設計,以更好的適應業務。

在許可權體系中,場景多是授權動作少,許可權點查詢載入的過程多,所在實現的過程中,可以適當考慮做冗餘的表關聯結構,從而簡化查詢的過程。

四、原始碼地址

應用倉庫:
https://gitee.com/cicadasmile/butte-flyer-parent

元件封裝:
https://gitee.com/cicadasmile/butte-frame-parent

相關文章