精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

權限系統中的數據權限設計經驗分享

jf_ro2CN3Fa ? 來源:JAVA日知錄 ? 作者:JAVA日知錄 ? 2022-10-11 17:50 ? 次閱讀

RBAC模型

數據權限

數據規則

關聯資源、用戶

繼續優化

小結

368bc130-42c0-11ed-96c9-dac502259ad0.jpg

在項目實際開發中我們不光要控制一個用戶能訪問哪些資源,還需要控制用戶只能訪問資源中的某部分數據。

控制一個用戶能訪問哪些資源我們有很成熟的權限管理模型即RBAC,但是控制用戶只能訪問某部分資源(即我們常說的數據權限)使用RBAC模型是不夠的,本文我們嘗試在RBAC模型的基礎上融入數據權限的管理控制。

首先讓我們先看下RBAC模型。

RBAC模型

RBAC是Role-BasedAccess Control的英文縮寫,意思是基于角色的訪問控制。

RBAC事先會在系統中定義出不同的角色,不同的角色擁有不同的權限,一個角色實際上就是一組權限的集合。而系統的所有用戶都會被分配到不同的角色中,一個用戶可能擁有多個角色。使用RBAC可以極大地簡化權限的管理。

RBAC模型還可以細分為RBAC0,RBAC1,RBAC2,RBAC3。這里我們不討論他們之間的差異,感興趣的同學可以自行研究,我們主要聚焦于常見的RBAC0模型上。

如下圖就是一個經典RBAC0模型的數據庫設計。

36afd7fa-42c0-11ed-96c9-dac502259ad0.pngrbac0模型

在RBAC模型下,系統只會驗證用戶A是否屬于角色RoleX,而不會判斷用戶A是否能訪問只屬于用戶B的數據DataB。這種問題我們稱之為“水平權限管理問題”。

數據權限

列表數據權限,主要通過數據權限控制行數據,讓不同的人有不同的查看數據規則;要實現數據權限,最重要的是需要抽象出數據規則。

數據規則

比如我們系統的商機數據,需要從下面幾個維度來控制數據訪問權限。

銷售人員只能看自己的數據;

各大區的銷售經理只能看各區域的數據(安徽大區的銷售經理看安徽區域的商機數據),同理也適用于某BG分管領導只能看所在BG的商機數據;

財務人員只能看金額小于一萬的數據。

上面的這些維度就是數據規則。

這樣數據規則的幾個重點要素我們也明晰了,就是規則字段規則表達式規則值 ,上面三個場景對應的規則分別如下:

規則字段:創建人,規則表達式:= ,規則值:當前登錄人

規則字段:所屬大區,規則表達式:= ,規則值:安徽大區

規則字段:銷售金額,規則表達式:< ,規則值:10000

36d65fe2-42c0-11ed-96c9-dac502259ad0.png數據規則

規則字段配置說明:
條件表達式:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
規則值:指定值(固定值/系統上下文變量)

關聯資源、用戶

光有數據規則是不夠的,我們還需要把數據規則跟資源和用戶進行綁定。

數據規則與資源的綁定很簡單,我們只需要建立一個中間表即可,如下圖所示:

3700b5d0-42c0-11ed-96c9-dac502259ad0.png關聯資源與用戶

這樣資源就可以關聯上了數據規則。

在應用設計上我們需要一個單獨的數據規則管理功能,方便我們錄入數據規則,然后在資源管理頁面(比如商機列表)上就可以選擇內置的數據規則進行資源與規則的綁定。

那么如何讓不同的用戶擁有不同的數據規則呢?

在RBAC模型中,用戶是通過授予不同的角色來進行資源的管理,同理我們可以讓角色在授予權限的時候關聯上數據規則,這樣最終在系統上就體現為不同的用戶擁有不同的數據規則。

有點拗口,我們還是按上面的例子來說。

銷售人員、大區銷售經理、財務人員屬于不同的角色,他們都擁有商機列表這個資源權限,但是在給這些角色綁定商機列表資源權限時我們可以勾選對應的數據規則(上面已經實現資源與數據規則的綁定)。體現在數據庫設計中我們可以在角色資源對應關系表 Role_Permission中添加一個字段用于存儲關聯的數據規則,如果有多個數據規則可以使用分隔符分割。

最終RBAC模型演變成如下所示的模型:

3721aac4-42c0-11ed-96c9-dac502259ad0.png

按照上面的設計我們需要區分各個大區管理的數據權限則需要建立不同的大區角色,如安徽大區銷售經理、上海大區銷售經理,然后分別給角色勾選對應的數據規則。這里就類似于RBAC1中的角色繼承的概念了。

這樣我們就基本實現了RBAC與數據規則的綁定,但是我們還有個問題就是如何在系統中落地。

這里我們就要借助大名鼎鼎的AOP來實現了,這篇文章只講原理不講實現,所以我們只順帶提一下實現方案。

自定義一個數據權限的注解,比如叫PermissionData

在對應的資源請求方法,比如商機列表上添加自定義注解@PermissionData

利用AOP抓取到用戶對應角色的所有數據規則并進行SQL拼接,最終在SQL層面實現數據過濾。

繼續優化

在上面的設計中我們通過給不同角色綁定不同數據規則實現了數據權限,但是考慮下面一種場景:某角色需要看到的數據范圍為 “所屬大區為安徽大區且事業部為消費者事業部的商機數據”,在這種場景里按照我們之前的設計需要建立兩個數據規則:

所屬大區 = 安徽大區

所屬事業部 = 消費者事業部

然后再建立2個不同的角色,分別授予不同的數據規則,如果這樣的場景比較多的話很容易出現角色爆炸的情況,所有我們這里再抽取出 數據規則組 的概念。

一個數據規則組有多個數據規則,數據規則之間通過 AND 進行連接,放一張應用設計圖:

374c36ae-42c0-11ed-96c9-dac502259ad0.png數據規則

體現在數據庫設計中就變成了如下所示:

3765af4e-42c0-11ed-96c9-dac502259ad0.png模型設計

小結

通過上面8張表的設計我們實現了RBAC模型與數據權限的結合,當然這里還有繼續優化的空間。比如這里的規則字段和規則值我們可以抽取出對應的字典表,讓數據規則表去關聯這些字典字段,這樣在應用層配置數據規則的時候就不需要管理員手動填寫而是從字典項中去選擇了,減少了數據規則配置出錯的概率。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2960

    瀏覽量

    104562
  • 編程
    +關注

    關注

    88

    文章

    3596

    瀏覽量

    93609

原文標題:權限系統中的數據權限就該這么設計,yyds!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Android系統文件權限解釋

    眾所周知,安卓是基于linux開發的,因此想要了解android系統文件的權限,需要從Linux說起。  Linux系統權限簡介:  一個文件一共有三個組別:用戶、群組、其它  其中每
    發表于 07-10 15:10

    區域權限系統的設計

    針對國家氣象服務中心的實際要求,建立供各級公共氣象服務中心開展公眾氣象服務調查、滿意度調查使用的公共氣象效益評估系統,提出了權限控制與區域關聯,是基于區域權限系統。不但需要實現
    發表于 03-07 15:08 ?0次下載
    區域<b class='flag-5'>權限</b><b class='flag-5'>系統</b>的設計

    PLM系統數據權限控制研究

    基于PLM系統中影響數據權限的4種因素,提出了基于權限規則的動態權限控制機制。為了使數據對象的生
    發表于 03-07 15:17 ?0次下載
    PLM<b class='flag-5'>系統</b><b class='flag-5'>中</b><b class='flag-5'>數據</b><b class='flag-5'>權限</b>控制研究

    Linux進程權限的分析說明

     在linux下,關于文件權限,大部分人接觸比較多,也比較熟悉了解。但是對進程權限一般知之甚少。本文總結一下linux系統下進程權限問題和現象。
    發表于 07-17 10:55 ?861次閱讀

    基于權限的Android應用風險評估方法

    針對Android權限機制存在的問題以及傳統的應用風險等級評估方法的不足,提出了一種基于權限的Android應用風險評估方法。首先,通過對應用程序進行逆向工程分析,提取出應用程序聲明的系統權限
    發表于 07-17 15:55 ?11次下載
    基于<b class='flag-5'>權限</b>的Android應用風險評估方法

    如何修改權限命令chmod用法

    Linux的Chmod命令用于更改或分配文件和目錄的權限。在Linux/Unix系統,文件和目錄的可訪問性是由文件所有權和權限決定的。在
    的頭像 發表于 11-03 17:16 ?6674次閱讀
    如何修改<b class='flag-5'>權限</b>命令chmod用法

    如何使用鴻蒙系統權限請求框架桃夭

    ?? 桃夭是鴻蒙系統上的一款權限請求框架,對請求權限的代碼進行高度封裝,極大的簡化了申請權限的代碼邏輯,同時支持在 Ability、FractionAbility、AbilitySli
    的頭像 發表于 11-10 09:34 ?2104次閱讀

    一款好用的鴻蒙系統上的權限請求框架

    ?? 桃夭是鴻蒙系統上的一款權限請求框架,對請求權限的代碼進行高度封裝,極大的簡化了申請權限的代碼邏輯,同時支持在 Ability、FractionAbility、AbilitySli
    的頭像 發表于 12-03 10:10 ?1842次閱讀

    erp用戶權限管理怎么做

    erp用戶權限管理怎么做?在erp系統系統權限管理員根據每個用戶的崗位和工作職責,為其分配相應的權限
    的頭像 發表于 12-02 14:50 ?2226次閱讀

    linux文件訪問權限怎么設置

    Linux 文件訪問權限是操作系統中一個非常重要的概念。正確地設置文件訪問權限可以保護系統的安全性,防止未經授權的人員對文件進行修改、刪除或執行。本文將詳細介紹 Linux 文件訪問
    的頭像 發表于 11-23 10:20 ?1453次閱讀

    Linux把目錄權限給指定用戶

    Linux是一個開放源代碼的操作系統,它基于Unix的設計原則,提供了豐富的權限管理功能,允許用戶對系統的文件和目錄進行精確的控制。在Linux
    的頭像 發表于 11-23 10:30 ?8073次閱讀

    Linux文件權限及Makefile

    操作系統,文件權限用于控制誰可以對文件進行哪些操作。文件權限權限位組合中表示為一組三位權限
    的頭像 發表于 11-24 16:06 ?554次閱讀
    Linux文件<b class='flag-5'>權限</b>及Makefile

    oracle系統權限和對象權限的區別

    Oracle系統權限和對象權限是Oracle數據的兩種不同類型的權限控制機制。雖然它們都是用
    的頭像 發表于 12-05 16:21 ?994次閱讀

    鴻蒙開發組件:DataAbility權限控制

    DataAbility提供數據服務,并不是所有的Ability都有權限讀寫它,DataAbility有一套權限控制機制來保證數據安全。分為靜態權限
    的頭像 發表于 06-21 10:30 ?300次閱讀
    鴻蒙開發組件:DataAbility<b class='flag-5'>權限</b>控制

    詳解Linux權限控制

    本章將和大家分享Linux權限控制。廢話不多說,下面我們直接進入主題。
    的頭像 發表于 08-05 15:32 ?483次閱讀
    詳解Linux<b class='flag-5'>中</b>的<b class='flag-5'>權限</b>控制