欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

權(quán)限系統(tǒng)中的數(shù)據(jù)權(quán)限設(shè)計(jì)經(jīng)驗(yàn)分享

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

RBAC模型

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

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

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

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

小結(jié)

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

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

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

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

RBAC模型

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

RBAC事先會(huì)在系統(tǒng)中定義出不同的角色,不同的角色擁有不同的權(quán)限,一個(gè)角色實(shí)際上就是一組權(quán)限的集合。而系統(tǒng)的所有用戶(hù)都會(huì)被分配到不同的角色中,一個(gè)用戶(hù)可能擁有多個(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ì)。

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

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

銷(xiāo)售人員只能看自己的數(shù)據(jù);

各大區(qū)的銷(xiāo)售經(jīng)理只能看各區(qū)域的數(shù)據(jù)(安徽大區(qū)的銷(xiāo)售經(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ī)則字段:銷(xiāo)售金額,規(guī)則表達(dá)式:< ,規(guī)則值:10000

36d65fe2-42c0-11ed-96c9-dac502259ad0.png數(shù)據(jù)規(guī)則

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

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

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

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

3700b5d0-42c0-11ed-96c9-dac502259ad0.png關(guān)聯(lián)資源與用戶(hù)

這樣資源就可以關(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ī)則的綁定。

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

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

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

銷(xiāo)售人員、大區(qū)銷(xiāo)售經(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模型演變成如下所示的模型:

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

按照上面的設(shè)計(jì)我們需要區(qū)分各個(gè)大區(qū)管理的數(shù)據(jù)權(quán)限則需要建立不同的大區(qū)角色,如安徽大區(qū)銷(xiāo)售經(jīng)理、上海大區(qū)銷(xiāo)售經(jīng)理,然后分別給角色勾選對(duì)應(yīng)的數(shù)據(jù)規(guī)則。這里就類(lèi)似于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抓取到用戶(hù)對(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)景比較多的話(huà)很容易出現(xiàn)角色爆炸的情況,所有我們這里再抽取出 數(shù)據(jù)規(guī)則組 的概念。

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

374c36ae-42c0-11ed-96c9-dac502259ad0.png數(shù)據(jù)規(guī)則

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

3765af4e-42c0-11ed-96c9-dac502259ad0.png模型設(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ò)的概率。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2975

    瀏覽量

    105181
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3638

    瀏覽量

    94012

原文標(biāo)題:權(quán)限系統(tǒng)中的數(shù)據(jù)權(quán)限就該這么設(shè)計(jì),yyds!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Android系統(tǒng)文件權(quán)限解釋

    眾所周知,安卓是基于linux開(kāi)發(fā)的,因此想要了解android系統(tǒng)文件的權(quán)限,需要從Linux說(shuō)起?! inux系統(tǒng)權(quán)限簡(jiǎn)介:  一個(gè)文件一共有三個(gè)組別:用戶(hù)、群組、其它  其中每
    發(fā)表于 07-10 15:10

    區(qū)域權(quán)限系統(tǒng)的設(shè)計(jì)

    針對(duì)國(guó)家氣象服務(wù)中心的實(shí)際要求,建立供各級(jí)公共氣象服務(wù)中心開(kāi)展公眾氣象服務(wù)調(diào)查、滿(mǎn)意度調(diào)查使用的公共氣象效益評(píng)估系統(tǒng),提出了權(quán)限控制與區(qū)域關(guān)聯(lián),是基于區(qū)域權(quán)限系統(tǒng)。不但需要實(shí)現(xiàn)
    發(fā)表于 03-07 15:08 ?0次下載
    區(qū)域<b class='flag-5'>權(quán)限</b><b class='flag-5'>系統(tǒng)</b>的設(shè)計(jì)

    PLM系統(tǒng)數(shù)據(jù)權(quán)限控制研究

    基于PLM系統(tǒng)中影響數(shù)據(jù)權(quán)限的4種因素,提出了基于權(quán)限規(guī)則的動(dòng)態(tài)權(quán)限控制機(jī)制。為了使數(shù)據(jù)對(duì)象的生
    發(fā)表于 03-07 15:17 ?0次下載
    PLM<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>權(quán)限</b>控制研究

    MaxCompute/DataWorks權(quán)限問(wèn)題排查建議

    /document_detail/27924.html DataWorks:數(shù)據(jù)工場(chǎng) DataWorks為MaxCompute上層的云數(shù)倉(cāng)開(kāi)發(fā)工具,擁有自身的權(quán)限模型外還支持底層MaxCompute底層數(shù)據(jù)授權(quán)體系。具體詳見(jiàn):
    發(fā)表于 12-27 15:13 ?448次閱讀
    MaxCompute/DataWorks<b class='flag-5'>權(quán)限</b>問(wèn)題排查建議

    Linux進(jìn)程權(quán)限的分析說(shuō)明

     在linux下,關(guān)于文件權(quán)限,大部分人接觸比較多,也比較熟悉了解。但是對(duì)進(jìn)程權(quán)限一般知之甚少。本文總結(jié)一下linux系統(tǒng)下進(jìn)程權(quán)限問(wèn)題和現(xiàn)象。
    發(fā)表于 07-17 10:55 ?905次閱讀

    基于權(quán)限的Android應(yīng)用風(fēng)險(xiǎn)評(píng)估方法

    針對(duì)Android權(quán)限機(jī)制存在的問(wèn)題以及傳統(tǒng)的應(yīng)用風(fēng)險(xiǎn)等級(jí)評(píng)估方法的不足,提出了一種基于權(quán)限的Android應(yīng)用風(fēng)險(xiǎn)評(píng)估方法。首先,通過(guò)對(duì)應(yīng)用程序進(jìn)行逆向工程分析,提取出應(yīng)用程序聲明的系統(tǒng)權(quán)限
    發(fā)表于 07-17 15:55 ?11次下載
    基于<b class='flag-5'>權(quán)限</b>的Android應(yīng)用風(fēng)險(xiǎn)評(píng)估方法

    如何修改權(quán)限命令chmod用法

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

    一款好用的鴻蒙系統(tǒng)上的權(quán)限請(qǐng)求框架

    ?? 桃夭是鴻蒙系統(tǒng)上的一款權(quán)限請(qǐng)求框架,對(duì)請(qǐng)求權(quán)限的代碼進(jìn)行高度封裝,極大的簡(jiǎn)化了申請(qǐng)權(quán)限的代碼邏輯,同時(shí)支持在 Ability、FractionAbility、AbilitySli
    的頭像 發(fā)表于 12-03 10:10 ?1941次閱讀

    erp用戶(hù)權(quán)限管理怎么做

    erp用戶(hù)權(quán)限管理怎么做?在erp系統(tǒng)系統(tǒng)權(quán)限管理員根據(jù)每個(gè)用戶(hù)的崗位和工作職責(zé),為其分配相應(yīng)的權(quán)限
    的頭像 發(fā)表于 12-02 14:50 ?2291次閱讀

    linux文件訪(fǎng)問(wèn)權(quán)限怎么設(shè)置

    Linux 文件訪(fǎng)問(wèn)權(quán)限是操作系統(tǒng)中一個(gè)非常重要的概念。正確地設(shè)置文件訪(fǎng)問(wèn)權(quán)限可以保護(hù)系統(tǒng)的安全性,防止未經(jīng)授權(quán)的人員對(duì)文件進(jìn)行修改、刪除或執(zhí)行。本文將詳細(xì)介紹 Linux 文件訪(fǎng)問(wèn)
    的頭像 發(fā)表于 11-23 10:20 ?1594次閱讀

    Linux把目錄權(quán)限給指定用戶(hù)

    Linux是一個(gè)開(kāi)放源代碼的操作系統(tǒng),它基于Unix的設(shè)計(jì)原則,提供了豐富的權(quán)限管理功能,允許用戶(hù)對(duì)系統(tǒng)的文件和目錄進(jìn)行精確的控制。在Linux
    的頭像 發(fā)表于 11-23 10:30 ?8445次閱讀

    Linux文件權(quán)限及Makefile

    操作系統(tǒng),文件權(quán)限用于控制誰(shuí)可以對(duì)文件進(jìn)行哪些操作。文件權(quán)限權(quán)限位組合中表示為一組三位權(quán)限
    的頭像 發(fā)表于 11-24 16:06 ?648次閱讀
    Linux文件<b class='flag-5'>權(quán)限</b>及Makefile

    oracle系統(tǒng)權(quán)限和對(duì)象權(quán)限的區(qū)別

    Oracle系統(tǒng)權(quán)限和對(duì)象權(quán)限是Oracle數(shù)據(jù)庫(kù)的兩種不同類(lèi)型的權(quán)限控制機(jī)制。雖然它們都是用
    的頭像 發(fā)表于 12-05 16:21 ?1222次閱讀

    詳解Linux權(quán)限控制

    本章將和大家分享Linux權(quán)限控制。廢話(huà)不多說(shuō),下面我們直接進(jìn)入主題。
    的頭像 發(fā)表于 08-05 15:32 ?671次閱讀
    詳解Linux<b class='flag-5'>中</b>的<b class='flag-5'>權(quán)限</b>控制

    linux權(quán)限管理詳解

    權(quán)限:在計(jì)算機(jī)系統(tǒng),權(quán)限是指某個(gè)計(jì)算機(jī)用戶(hù)具有使用軟件資源的權(quán)利。
    的頭像 發(fā)表于 12-25 09:43 ?189次閱讀