通用數據權限設計思維概述

1、數據權限概述

  1.1 什麼是數據權限?
  數據權限是指對系統用戶進行數據資源可見性的控制,通俗的解釋就是:只有符合條件的用戶才能看到該條件下對應的數據資源.舉個簡單的例子:
  本組織的銷售人員只能看見本組織的客戶信息。
  某專職會計只能看見A部門及其下級部門的單據。
  上述這些需求,使用硬編碼也是可以實現的,但是在業務快速發展的過程中,類似這種數據權限需求會越來越多,如果全部採用硬編碼的方式,無疑會給我們帶來巨大的開發和維護壓力。
  1.2 要素分析
  從數據權限的解釋來看,只有符合條件的用戶才能看到該條件下對應的數據資源.由此可以分析出數據權限控制中幾個關鍵要素:
  1.主體。狹義上來講,主體單指用戶,但是實際應用上來講,權限可能分配給某一羣或某一類人更方便,所以廣義上的主體,我們可以擴展到身份,角色,職務等跟用戶相關的概念。
  2.資源。即需要控制訪問範圍的數據,例如客戶信息,部門信息。
  3.規則描述。即主體對於特定的數據資源適用的條件。
  以上是數據權限的基礎三要素。

2、數據權限設計

  理論上來說,數據權限描述的是用戶在訪問受控的系統數據時,獲取用戶對數據資源適用的條件規則,而用戶對資源的條件規則一般並不是唯一的,例如:
  某用戶在填制單據時,使用的數據資源要符合如下規則:
  物料 的 物料分類 的 編碼是以'01'開頭的
  並且 部門的主管是'張三'
  並且 客戶信息的所屬組織是用戶的所屬組織。
  像這樣的規則邏輯如何用程序來描述呢?
  2.1規則和原子規則
  2.1.1規則
  根據上個章節的描述,其實數據權限可以表達爲對不同主體所分配的數據資源的適用性條件的組合,剝離主體這個不確定的受衆之後,其實數據權限可以描述成針對不同數據資源的適用性條件,這個我們可以歸納成一個數據規則,而這個規則具有通用性,可以被多個受衆/主體使用,所以我們將相對完整並獨立的數據資源的適用性條件聲明爲規則。規則直接可以組合成新的規則。例如
  物料 的 物料分類 的 編碼是以'01'開頭的
  這個可以認爲是針對物料這個資源的一個規則。
  物料 的 物料分類 的 編碼是以'01'開頭的
  並且 部門的主管是'張三'
  並且 客戶信息的所屬組織是用戶的所屬組織。
  這個可以認爲是對某個用戶/角色的規則
  2.1.2 原子規則
  從上面列舉的例子我們可以看到,規則可以是多個資源的適用性條件組合,也可以是多級資源的適用性條件拼接,這樣我們描述一個規則時可能會有多種方式,這樣反而不利於我們建立規則描述的標準,我們需要建立一個標準來規範它,在此,我們定義:對於資源和資源自身直接屬性的非組合性條件限定屬於基礎規則,例如
  物料=A
  物料的物料分類=A(因爲物料分類是物料的直接屬性)
  都是基礎規則
  而
  物料的物料分類的編碼=A牽扯到了物料和物料分類2個資源的屬性,不屬於基礎規則。
  同樣的
  物料=A並且物料的物料分類=A也不屬於基礎規則
  如此,我們可以聲明對於單個資源的基礎規則描述可以稱爲原子規則。
  聲明瞭原子規則有什麼好處?
  1、原子規則是針對一個資源的簡單條件限定,邏輯簡單,且不會產生跨領域或跨服務的問題。
  2、所有的複雜邏輯都可以分解爲原子規則再進行拼裝。
  3、分解後的規則職責明確,追溯方便。
  如下圖,將所有的數據規則都最終分解爲原子規則後,每個應用只解析自己負責的資源條件即可,不需要產生跨領域的連接和依賴,而且每個規則解析完的結果都非常明確,出問題後非常容易溯源。
通用數據權限設計思維概述
  2.2 資源和條件描述
  前面說明的規則的組成部分,那如何將規則程序化呢?
  資源:這個就比較簡單,資源實際就是需要控制的數據,一般可以描述成業務對象,考慮多系統多應用的支持,提供統一註冊和訪問機制即可。
  條件描述:爲了將條件描述轉換成機器可理解的邏輯,我們需要設計一套邏輯表達式和表達式解析器,比如正則表達式,公式等等,因爲目前大部分業務應用是基於關係型數據庫開發的,從實現難度考慮,建議採用一些比較方便SQL語法化的邏輯表現形式。
  2.3規則分類
  實際應用中,我們的規則其實主要可以分爲兩類
  1)靜態數據型
  此類規則的限定條件一般是跟環境無關,例如:
  地區分類=北京
  商品分類=辦公用品
  明確的資源和明確的值範圍。可以預先計算出結果並存儲起來以備使用。
  2)動態邏輯型
  此類規則的限定條件一般是和環境信息相關,根據環境信息動態變化的,例如:
  客戶的所屬組織=用戶的所屬組織
  條件的判斷與登錄的用戶身份息息相關,不能預先計算得到結果,需要動態解析計算的。
  靜態數據型可以通過預先計算提高效率,但是一般會存在數據時效性的問題。
  靜態數據型可以轉換成動態邏輯型,但是動態邏輯型一般不能轉成靜態數據型。
  2.4多應用規則註冊與解析設計
通用數據權限設計思維概述
  企業系統中,爲了統一數據管理,有的建立了公共數倉,有的不一定有,爲了適多應用多場景的情況,我們設計了權限的解析模型,每個應用都針對自己的資源發佈原子服務,然後公共數倉針對公用的數據發佈代理服務,原子服務和原子服務直接因爲是跨服務調用,所以只能順序調用,而同一個數倉發佈的代理服務,因爲數據存儲在同一位置,可以進行規則合併。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章