最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

數(shù)據(jù)設(shè)計(jì)之權(quán)限的實(shí)現(xiàn)

 更新時(shí)間:2022年08月04日 08:31:40   作者:飄渺Jam  
這篇文章主要介紹了數(shù)據(jù)設(shè)計(jì)之權(quán)限的實(shí)現(xiàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

前言

在項(xiàng)目實(shí)際開(kāi)發(fā)中我們不光要控制一個(gè)用戶能訪問(wèn)哪些資源,還需要控制用戶只能訪問(wèn)資源中的某部分?jǐn)?shù)據(jù)。

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

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

RBAC模型

RBAC是Role-BasedAccess Control的英文縮寫(xiě),意思是基于角色的訪問(wèn)控制。

RBAC事先會(huì)在系統(tǒng)中定義出不同的角色,不同的角色擁有不同的權(quán)限,一個(gè)角色實(shí)際上就是一組權(quán)限的集合。而系統(tǒng)的所有用戶都會(huì)被分配到不同的角色中,一個(gè)用戶可能擁有多個(gè)角色。使用RBAC可以極大地簡(jiǎn)化權(quán)限的管理。

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

如下圖就是一個(gè)經(jīng)典RBAC0模型的數(shù)據(jù)庫(kù)設(shè)計(jì)。

在RBAC模型下,系統(tǒng)只會(huì)驗(yàn)證用戶A是否屬于角色RoleX,而不會(huì)判斷用戶A是否能訪問(wèn)只屬于用戶B的數(shù)據(jù)DataB。這種問(wèn)題我們稱之為“水平權(quán)限管理問(wèn)題”。

數(shù)據(jù)權(quán)限

列表數(shù)據(jù)權(quán)限,主要通過(guò)數(shù)據(jù)權(quán)限控制行數(shù)據(jù),讓不同的人有不同的查看數(shù)據(jù)規(guī)則;要實(shí)現(xiàn)數(shù)據(jù)權(quán)限,最重要的是需要抽象出數(shù)據(jù)規(guī)則。

數(shù)據(jù)規(guī)則

比如我們系統(tǒng)的商機(jī)數(shù)據(jù),需要從下面幾個(gè)維度來(lái)控制數(shù)據(jù)訪問(wèn)權(quán)限。

  • 銷售人員只能看自己的數(shù)據(jù);
  • 各大區(qū)的銷售經(jīng)理只能看各區(qū)域的數(shù)據(jù)(安徽大區(qū)的銷售經(jīng)理看安徽區(qū)域的商機(jī)數(shù)據(jù)),同理也適用于某BG分管領(lǐng)導(dǎo)只能看所在BG的商機(jī)數(shù)據(jù);
  • 財(cái)務(wù)人員只能看金額小于一萬(wàn)的數(shù)據(jù)。

上面的這些維度就是數(shù)據(jù)規(guī)則。

這樣數(shù)據(jù)規(guī)則的幾個(gè)重點(diǎn)要素我們也明晰了,就是規(guī)則字段,規(guī)則表達(dá)式規(guī)則值,

上面三個(gè)場(chǎng)景對(duì)應(yīng)的規(guī)則分別如下:

  • 規(guī)則字段:創(chuàng)建人,規(guī)則表達(dá)式: = ,規(guī)則值:當(dāng)前登錄人
  • 規(guī)則字段:所屬大區(qū),規(guī)則表達(dá)式: = ,規(guī)則值:安徽大區(qū)
  • 規(guī)則字段:銷售金額,規(guī)則表達(dá)式: < ,規(guī)則值:10000

規(guī)則字段配置說(shuō)明: 

條件表達(dá)式:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
規(guī)則值:指定值 ( 固定值/系統(tǒng)上下文變量 )

關(guān)聯(lián)資源、用戶

光有數(shù)據(jù)規(guī)則是不夠的,我們還需要把數(shù)據(jù)規(guī)則跟資源和用戶進(jìn)行綁定。

數(shù)據(jù)規(guī)則與資源的綁定很簡(jiǎn)單,我們只需要建立一個(gè)中間表即可,如下圖所示:

這樣資源就可以關(guān)聯(lián)上了數(shù)據(jù)規(guī)則。

在應(yīng)用設(shè)計(jì)上我們需要一個(gè)單獨(dú)的數(shù)據(jù)規(guī)則管理功能,方便我們錄入數(shù)據(jù)規(guī)則,然后在資源管理頁(yè)面(比如商機(jī)列表)上就可以選擇內(nèi)置的數(shù)據(jù)規(guī)則進(jìn)行資源與規(guī)則的綁定。

那么如何讓不同的用戶擁有不同的數(shù)據(jù)規(guī)則呢?

在RBAC模型中,用戶是通過(guò)授予不同的角色來(lái)進(jìn)行資源的管理,同理我們可以讓角色在授予權(quán)限的時(shí)候關(guān)聯(lián)上數(shù)據(jù)規(guī)則,這樣最終在系統(tǒng)上就體現(xiàn)為不同的用戶擁有不同的數(shù)據(jù)規(guī)則。

有點(diǎn)拗口,我們還是按上面的例子來(lái)說(shuō)。

銷售人員、大區(qū)銷售經(jīng)理、財(cái)務(wù)人員屬于不同的角色,他們都擁有商機(jī)列表這個(gè)資源權(quán)限,但是在給這些角色綁定商機(jī)列表資源權(quán)限時(shí)我們可以勾選對(duì)應(yīng)的數(shù)據(jù)規(guī)則(上面已經(jīng)實(shí)現(xiàn)資源與數(shù)據(jù)規(guī)則的綁定)。體現(xiàn)在數(shù)據(jù)庫(kù)設(shè)計(jì)中我們可以在角色資源對(duì)應(yīng)關(guān)系表 Role_Permission中添加一個(gè)字段用于存儲(chǔ)關(guān)聯(lián)的數(shù)據(jù)規(guī)則,如果有多個(gè)數(shù)據(jù)規(guī)則可以使用分隔符分割。

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

按照上面的設(shè)計(jì)我們需要區(qū)分各個(gè)大區(qū)管理的數(shù)據(jù)權(quán)限則需要建立不同的大區(qū)角色,如安徽大區(qū)銷售經(jīng)理、上海大區(qū)銷售經(jīng)理,然后分別給角色勾選對(duì)應(yīng)的數(shù)據(jù)規(guī)則。這里就類似于RBAC1中的角色繼承的概念了。

這樣我們就基本實(shí)現(xiàn)了RBAC與數(shù)據(jù)規(guī)則的綁定,但是我們還有個(gè)問(wèn)題就是如何在系統(tǒng)中落地。

這里我們就要借助大名鼎鼎的AOP來(lái)實(shí)現(xiàn)了,這篇文章只講原理不講實(shí)現(xiàn),所以我們只順帶提一下實(shí)現(xiàn)方案。

  • 自定義一個(gè)數(shù)據(jù)權(quán)限的注解,比如叫PermissionData
  • 在對(duì)應(yīng)的資源請(qǐng)求方法,比如商機(jī)列表上添加自定義注解@PermissionData
  • 利用AOP抓取到用戶對(duì)應(yīng)角色的所有數(shù)據(jù)規(guī)則并進(jìn)行SQL拼接,最終在SQL層面實(shí)現(xiàn)數(shù)據(jù)過(guò)濾。

繼續(xù)優(yōu)化

在上面的設(shè)計(jì)中我們通過(guò)給不同角色綁定不同數(shù)據(jù)規(guī)則實(shí)現(xiàn)了數(shù)據(jù)權(quán)限,但是考慮下面一種場(chǎng)景:某角色需要看到的數(shù)據(jù)范圍為 “所屬大區(qū)為安徽大區(qū)且事業(yè)部為消費(fèi)者事業(yè)部的商機(jī)數(shù)據(jù)”,

在這種場(chǎng)景里按照我們之前的設(shè)計(jì)需要建立兩個(gè)數(shù)據(jù)規(guī)則:

  • 所屬大區(qū) = 安徽大區(qū)
  • 所屬事業(yè)部 = 消費(fèi)者事業(yè)部

然后再建立2個(gè)不同的角色,分別授予不同的數(shù)據(jù)規(guī)則,如果這樣的場(chǎng)景比較多的話很容易出現(xiàn)角色爆炸的情況,所有我們這里再抽取出 數(shù)據(jù)規(guī)則組 的概念。

一個(gè)數(shù)據(jù)規(guī)則組有多個(gè)數(shù)據(jù)規(guī)則,數(shù)據(jù)規(guī)則之間通過(guò) AND 進(jìn)行連接,放一張應(yīng)用設(shè)計(jì)圖:

體現(xiàn)在數(shù)據(jù)庫(kù)設(shè)計(jì)中就變成了如下所示:

小結(jié)

通過(guò)上面8張表的設(shè)計(jì)我們實(shí)現(xiàn)了RBAC模型與數(shù)據(jù)權(quán)限的結(jié)合,當(dāng)然這里還有繼續(xù)優(yōu)化的空間。比如這里的規(guī)則字段和規(guī)則值我們可以抽取出對(duì)應(yīng)的字典表,讓數(shù)據(jù)規(guī)則表去關(guān)聯(lián)這些字典字段,這樣在應(yīng)用層配置數(shù)據(jù)規(guī)則的時(shí)候就不需要管理員手動(dòng)填寫(xiě)而是從字典項(xiàng)中去選擇了,減少了數(shù)據(jù)規(guī)則配置出錯(cuò)的概率。

數(shù)據(jù)權(quán)限是一個(gè)實(shí)現(xiàn)相對(duì)比較復(fù)雜的功能,這里我們選擇的是在RBAC模型基礎(chǔ)上進(jìn)行擴(kuò)展,如果你有更好的解決方案歡迎留言告訴我。

到此這篇關(guān)于數(shù)據(jù)設(shè)計(jì)之權(quán)限的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)數(shù)據(jù)權(quán)限內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spark SQL操作JSON字段的小技巧

    Spark SQL操作JSON字段的小技巧

    這篇文章主要給大家介紹了關(guān)于Spark SQL操作JSON字段的小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spark sql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實(shí)戰(zhàn)記錄

    一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實(shí)戰(zhàn)記錄,本文通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者了解sql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 利用SQL腳本導(dǎo)入數(shù)據(jù)到不同數(shù)據(jù)庫(kù)避免重復(fù)的3種方法

    利用SQL腳本導(dǎo)入數(shù)據(jù)到不同數(shù)據(jù)庫(kù)避免重復(fù)的3種方法

    這篇文章主要給大家介紹了關(guān)于利用SQL腳本導(dǎo)入數(shù)據(jù)到不同數(shù)據(jù)庫(kù)避免重復(fù)的3種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Navicat導(dǎo)入Excel數(shù)據(jù)時(shí)數(shù)據(jù)被截?cái)嗟膯?wèn)題分析與解決方案

    Navicat導(dǎo)入Excel數(shù)據(jù)時(shí)數(shù)據(jù)被截?cái)嗟膯?wèn)題分析與解決方案

    在數(shù)據(jù)庫(kù)的日常操作中,將Excel數(shù)據(jù)導(dǎo)入MySQL是常見(jiàn)的需求之一,特別是通過(guò)Navicat工具進(jìn)行Excel數(shù)據(jù)導(dǎo)入時(shí),可能會(huì)遇到數(shù)據(jù)截?cái)嗟膯?wèn)題,本文將從問(wèn)題分析出發(fā),探討原因及解決方法,并詳細(xì)說(shuō)明如何避免此類問(wèn)題的發(fā)生,需要的朋友可以參考下
    2024-11-11
  • 數(shù)據(jù)庫(kù)命名規(guī)范小結(jié)

    數(shù)據(jù)庫(kù)命名規(guī)范小結(jié)

    數(shù)據(jù)庫(kù)命名規(guī)范,在實(shí)際的數(shù)據(jù)庫(kù)開(kāi)發(fā)中,需要注意。
    2009-03-03
  • SQL中ISNULL函數(shù)使用介紹

    SQL中ISNULL函數(shù)使用介紹

    這篇文章介紹了SQL Server、MySQL、Oracle三種數(shù)據(jù)庫(kù)中ISNULL函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 比較實(shí)用SQL語(yǔ)句總結(jié)

    比較實(shí)用SQL語(yǔ)句總結(jié)

    sql語(yǔ)句查詢,比較實(shí)用的技巧
    2008-04-04
  • sql中l(wèi)eft join的效率分析與提高效率方法

    sql中l(wèi)eft join的效率分析與提高效率方法

    網(wǎng)站隨著數(shù)據(jù)量與訪問(wèn)量越來(lái)越大,訪問(wèn)的速度變的越來(lái)越慢,于是開(kāi)始想辦法解決優(yōu)化速度慢的原因,下面是對(duì)程序中一條sql的分析與提高效率的過(guò)程
    2018-03-03
  • leaf方案實(shí)現(xiàn)美團(tuán)點(diǎn)評(píng)分布式ID生成系統(tǒng)

    leaf方案實(shí)現(xiàn)美團(tuán)點(diǎn)評(píng)分布式ID生成系統(tǒng)

    在復(fù)雜分布式系統(tǒng)中,往往需要對(duì)大量的數(shù)據(jù)和消息進(jìn)行唯一標(biāo)識(shí)。如在美團(tuán)點(diǎn)評(píng)的金融、支付、餐飲、酒店、貓眼電影等產(chǎn)品的系統(tǒng)中,數(shù)據(jù)日漸增長(zhǎng),對(duì)數(shù)據(jù)分庫(kù)分表后需要有一個(gè)唯一ID來(lái)標(biāo)識(shí)一條數(shù)據(jù)或消息,數(shù)據(jù)庫(kù)的自增ID顯然不能滿足需求
    2022-01-01
  • JDBC 數(shù)據(jù)庫(kù)常用連接 鏈接字符串

    JDBC 數(shù)據(jù)庫(kù)常用連接 鏈接字符串

    JDBC 數(shù)據(jù)庫(kù)常用連接 鏈接字符串,經(jīng)常用各種數(shù)據(jù)庫(kù)的朋友可以參考下。
    2009-07-07

最新評(píng)論

嘉荫县| 房产| 海城市| 沈阳市| 秦皇岛市| 墨江| 乐平市| 呼和浩特市| 炎陵县| 体育| 麦盖提县| 大连市| 织金县| 南陵县| 垣曲县| 手游| 民勤县| 宝应县| 五寨县| 台江县| 新巴尔虎右旗| 普宁市| 湘西| 岳阳县| 龙里县| 万源市| 南雄市| 南城县| 濮阳市| 大邑县| 如东县| 宁津县| 汨罗市| 勃利县| 上栗县| 屯留县| 富蕴县| 清河县| 定安县| 当阳市| 锦州市|