日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

低代碼平臺(tái)如何做數(shù)據(jù)范圍權(quán)限控制——關(guān)系數(shù)據(jù)庫(kù)(低代碼 數(shù)據(jù)庫(kù)設(shè)計(jì))

幾乎每一個(gè)軟件系統(tǒng)都涉及到權(quán)限設(shè)計(jì),權(quán)限控制又分為功能權(quán)限控制和數(shù)據(jù)范圍權(quán)限控制。toC的軟件權(quán)限控制一般都是根據(jù)用戶畫(huà)像(特征數(shù)據(jù))來(lái)控制的,即使有部分可以配置也相對(duì)比較簡(jiǎn)單。toB的系統(tǒng)一般都需要靈活的配置,功能權(quán)限配置也有RBAC(Role-Based Access Control)這樣的標(biāo)準(zhǔn),數(shù)據(jù)范圍權(quán)限控制就沒(méi)有這樣的標(biāo)準(zhǔn)的解決方案了。

常見(jiàn)的數(shù)據(jù)范圍權(quán)限控制方案

常見(jiàn)的一種數(shù)據(jù)范圍權(quán)限控制方案是將業(yè)務(wù)按照歸屬人員和歸屬部門(mén)來(lái)劃分,在配置時(shí)可有以下選項(xiàng):

  • 我的業(yè)務(wù);
  • 部門(mén)的業(yè)務(wù);
  • 下級(jí)部門(mén)的業(yè)務(wù)。

這樣的設(shè)計(jì)一般也能夠滿足大部分業(yè)務(wù)的需求,但是它有以下幾個(gè)明顯的缺點(diǎn):

  • 不是非常靈活,只能根據(jù)業(yè)務(wù)的歸屬來(lái)進(jìn)行范圍劃分;
  • 數(shù)據(jù)必須內(nèi)置歸屬人員和歸屬部門(mén)字段,有的系統(tǒng)還約定了字段名稱。

基于條件表達(dá)式的數(shù)據(jù)范圍設(shè)置

條件表達(dá)式類似與sql語(yǔ)句條件表達(dá)式,在數(shù)據(jù)查詢時(shí)植入到查詢語(yǔ)句中,在修改時(shí)對(duì)數(shù)據(jù)對(duì)象進(jìn)行驗(yàn)證。

低代碼平臺(tái)如何做數(shù)據(jù)范圍權(quán)限控制——關(guān)系數(shù)據(jù)庫(kù)(低代碼 數(shù)據(jù)庫(kù)設(shè)計(jì))

數(shù)據(jù)范圍權(quán)限條件表達(dá)式設(shè)置

條件表達(dá)式的形式是一個(gè)邏輯表達(dá)式,其中方括號(hào)中的是 [表名.字段名],花括號(hào)中的是 { 環(huán)境變量或?qū)傩? ':' 在SQL語(yǔ)句中的變量名},這個(gè)SQL語(yǔ)句中的變量名是可選的,它的作用是個(gè)前面環(huán)境變量和屬性重命名,避免命名SQL語(yǔ)句不合法。

低代碼平臺(tái)如何做數(shù)據(jù)范圍權(quán)限控制——關(guān)系數(shù)據(jù)庫(kù)(低代碼 數(shù)據(jù)庫(kù)設(shè)計(jì))

配置不同角色的 數(shù)據(jù)權(quán)限范圍

接口的權(quán)限遵循RBAC規(guī)范,將接口和角色關(guān)聯(lián),系統(tǒng)在關(guān)聯(lián)角色時(shí)同時(shí)配置數(shù)據(jù)范圍表達(dá)式,實(shí)現(xiàn)范圍的權(quán)限控制。

條件表達(dá)式數(shù)據(jù)范圍控制的實(shí)現(xiàn)方式

訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)有兩種方式,一種通過(guò)ORM接口訪問(wèn)數(shù)據(jù)庫(kù)中的表,另一種是直接用SQL語(yǔ)句訪問(wèn)數(shù)據(jù)庫(kù)。這兩種方式有不同的控制方式:

一、ORM接口訪問(wèn)

需要對(duì)ORM接口進(jìn)行擴(kuò)展或者自己設(shè)計(jì)一套ORM方案,南大先騰做了MyBatisHibernate的對(duì)應(yīng)功能的拓展 https://github.com/ndxt/centit-persistence/tree/before-delete-hibernate-mybatis ,因?yàn)楹髞?lái)公司全部研發(fā)都轉(zhuǎn)移到自研的ORM,這個(gè)擴(kuò)展也不再更新了,各位有興趣可以獲取。

在ORM接口訪問(wèn)數(shù)據(jù)庫(kù)時(shí)對(duì)上面的表達(dá)式進(jìn)行轉(zhuǎn)換,主要是轉(zhuǎn)換花括號(hào){}中的環(huán)境變量。

二、SQL語(yǔ)句訪問(wèn)

SQL語(yǔ)句訪問(wèn)時(shí)也要對(duì)語(yǔ)句進(jìn)行拓展,在SQL語(yǔ)句中添加錨點(diǎn),形式如下:

select * from bussiness_chance a where 1=1 { bussiness_chance a } order by a.create_time

其中 { bussiness_chance a } 為錨點(diǎn),形式為 { 表名 別名, 表名 別名,……..} 別名是可選的,一個(gè)錨點(diǎn)可以有多個(gè)表。SQL語(yǔ)句再執(zhí)行前需要進(jìn)行預(yù)處理,系統(tǒng)根據(jù)當(dāng)前用戶的角色查找他用于的角色在當(dāng)前接口中的所有數(shù)據(jù)范圍權(quán)限表達(dá)式,如果有多個(gè)表達(dá)式則用or連接成符合比表達(dá)式,并替換到SQL語(yǔ)句的錨點(diǎn)中。比如上面的示例替換的結(jié)果為:

select * from bussiness_chance a where 1=1 and a.follow_user = :currUserCode order by a.create_time

同時(shí)在參數(shù)變量表中添加一個(gè)currUserCode的變量,對(duì)應(yīng)的值為 當(dāng)前用戶環(huán)境變量中的currentUser.userCode值。

總結(jié)

通過(guò)條件表達(dá)式的方式來(lái)控制數(shù)據(jù)范圍權(quán)限理論上可以對(duì)任何字段進(jìn)行過(guò)濾控制,可以在系統(tǒng)上線后同個(gè)配置的方式進(jìn)行靈活配置。但是也有一些缺點(diǎn):一、只能用于關(guān)系數(shù)據(jù)庫(kù)并且需要拓展ORM模塊或者自研ORM模塊,二、SQL語(yǔ)句需要添加數(shù)據(jù)范圍權(quán)限的控制錨點(diǎn),雖然不麻煩也不復(fù)雜但是不能忘掉。

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部
凭祥市| 汨罗市| 洮南市| 北宁市| 兴隆县| 彭山县| 三都| 玉环县| 重庆市| 田阳县| 和静县| 山阳县| 墨江| 龙井市| 新余市| 陆良县| 荔波县| 康定县| 兴城市| 泰州市| 麻栗坡县| 随州市| 油尖旺区| 浦江县| 陵水| 马边| 禹城市| 会宁县| 信宜市| 尉犁县| 博爱县| 正蓝旗| 惠水县| 遂川县| 伊通| 肃北| 阿合奇县| 贡山| 车险| 泗阳县| 疏勒县|