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

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

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

大型SaaS系統(tǒng)的數(shù)據(jù)范圍權(quán)限設(shè)計與實現(xiàn)

jf_ro2CN3Fa ? 來源:CSDN ? 2023-03-24 11:36 ? 次閱讀


toB 的系統(tǒng),除了普通的權(quán)限管理之外,往往還需要數(shù)據(jù)范圍權(quán)限。本文介紹一種,簡單的易實現(xiàn)的 Saas 多租戶數(shù)據(jù)范圍權(quán)限系統(tǒng)的簡單設(shè)計與實現(xiàn)。

權(quán)限的概述

我們一般說權(quán)限的時候是在說「功能權(quán)限和數(shù)據(jù)權(quán)限」

功能權(quán)限指用「戶登陸系統(tǒng)后能看到什么模塊,能看到哪些頁面」

而數(shù)據(jù)權(quán)限指的「是用戶在某個模塊里能看到幾條數(shù)據(jù),能看到哪些數(shù)據(jù)」 。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

功能權(quán)限

在企業(yè)系統(tǒng)中,通過配置用戶的功能權(quán)限可以解決不同的人分管不同業(yè)務(wù)的需求,基于RBAC模型,RBAC(Role Based Access Control)模型,它的中文是基于角色的訪問控制,主要是將功能組合成角色,再將角色分配給用戶,也就是說「角色是功能的合集?!?/strong>

為何要基于RBAC

企業(yè)A一共有12個功能,需要創(chuàng)建100個用戶,這些用戶中有管財務(wù)的、有管人事的、有管銷售的等等。如果不引入RBAC模型,我們需要每創(chuàng)建一個用戶就要分配一次功能,至少(每個用戶只有一個功能)操作100次,如果人數(shù)增加到1000甚至10000,并且一個用戶可能會有多個功能的時候,操作會非常繁瑣,如圖:

53f9cf3a-c9f4-11ed-bfe3-dac502259ad0.png為何要基于RBAC

經(jīng)過多次操作發(fā)現(xiàn):分配給某些人的功能都是相同的,比如分配給A、B等10個用戶的功能都是客戶管理、訂單管理及供應(yīng)商管理這幾個模塊,那是不是可以把這幾個功能模塊打成一個包整體分給需要的用戶呢?

這個包就叫做角色。由于角色和功能的對應(yīng)關(guān)系相對固定,給用戶分配權(quán)限的時候只分配角色即可。

542e89f0-c9f4-11ed-bfe3-dac502259ad0.png為何要基于RBAC

總結(jié):

  1. 解耦用戶和功能,降低操作錯誤率;
  2. 降低功能權(quán)限分配的繁瑣程度。
5444429a-c9f4-11ed-bfe3-dac502259ad0.png為何要基于RBAC

功能粒度

功能的粒度從粗到細一般分為:「模塊級->頁面級->接口級(接口級的功能權(quán)限指的是哪個角色能調(diào)用哪些接口)?!?/strong>

從后臺角度:為了系統(tǒng)安全,代碼肯定都會實現(xiàn)到接口級。那我們做粒度選擇的意義是什么?當(dāng)然是為用戶降本增效。只是粒度越粗,用戶操作越簡單,靈活性卻越低。

用戶的優(yōu)先級

我們常用的優(yōu)先級順序是查看「詳情>查看列表>增加、刪除、編輯、其他操作按鈕」

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

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

數(shù)據(jù)權(quán)限解決的是用戶能看到多少數(shù)據(jù)量和什么數(shù)據(jù)的問題,例如A和B兩個用戶都能看到銷售模塊,但A能看到320條數(shù)據(jù),B只能看到100條數(shù)據(jù),且A能看到的320條數(shù)據(jù)中包含著B能看到的100條數(shù)據(jù),這些都是由數(shù)據(jù)權(quán)限決定的。

數(shù)據(jù)權(quán)限和什么有關(guān)系

數(shù)據(jù)權(quán)限一般和企業(yè)的組織架構(gòu)相關(guān),而組織架構(gòu)分為樹狀和扁平狀的(還有更復(fù)雜組織架構(gòu),此處暫不做說明)

545ea720-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限和什么有關(guān)系

「數(shù)據(jù)權(quán)限主要和組織架構(gòu)有關(guān)」 ,組織架構(gòu)中樹狀架構(gòu)較為復(fù)雜,需要統(tǒng)一或者分模塊的定義層級間數(shù)據(jù)共享問題。

數(shù)據(jù)權(quán)限定義過程中如果出現(xiàn)同一結(jié)點下的【用戶間層級問題(上下級)】需要回到功能權(quán)限的【角色定義】去解決。

數(shù)據(jù)權(quán)限的操作步驟

思想

「數(shù)據(jù)權(quán)限的控制是通過部門的菜單展示來實現(xiàn)的?!?/strong>

用到數(shù)據(jù)權(quán)限的地方

  1. 用戶添加時候,選擇部門的下拉框
546f642a-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限
  1. 部門管理的列表
547f0c2c-c9f4-11ed-bfe3-dac502259ad0.png部門管理的列表
  1. 角色管理,新增彈框頁面,選擇部門的樹狀菜單
5495d696-c9f4-11ed-bfe3-dac502259ad0.png角色管理

部門管理中部門列表的數(shù)據(jù)權(quán)限

controller層加載部門列表,加載全部部門信息

54ad70bc-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限

sevice層邏輯:將當(dāng)前登錄用戶所擁有的部門id設(shè)置成查詢部門列表的where的篩選條件

54ecbea2-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限55022dc8-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限

定義一個commonDataservice層:獲取用戶所具有的所有部門ids

  1. 在commonDataService類中的getCurrUserDataDeptIds()方法,獲取當(dāng)前登錄用戶的部門數(shù)據(jù)ids列表
55161c66-c9f4-11ed-bfe3-dac502259ad0.png圖片
  1. 如果當(dāng)前登錄用戶id為超級管理員,則加載全部菜單信息,如下圖所示:
5534ffaa-c9f4-11ed-bfe3-dac502259ad0.png圖片
  1. 如果當(dāng)前登錄用戶id不為超級管理員,通過用戶id,獲取sys_role_dpet,sys_user_role這兩張表進行關(guān)聯(lián)(「已擁有制定部門的權(quán)利且未占用」 ),獲取該登錄用戶所屬的部門id
55427a7c-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限
  1. 數(shù)據(jù)權(quán)限用戶已經(jīng)分配且已經(jīng)擁有的部門(「已擁有制定部門的權(quán)利且已占用」 ),「作用是選擇了一個一級部門,那么一級部門所包含的二級部門,三級部門等也要賦值給用戶,也就是說擁有的部門下面還有子部門,那么也具有該部門以及子部門的擁有權(quán),使用遞歸算法全部遍歷獲得?!?/strong> 如下圖所示
5550f106-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限556840e0-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限5576121a-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限
  1. 將當(dāng)前登錄用戶所擁有的部門id通過逗號進行拼接
5589eb5a-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限

用戶新增彈框中的部門列表的數(shù)據(jù)權(quán)限

同樣調(diào)用的是SysDepartController中的depart/list的方法,邏輯見2.3節(jié)

55a32dc2-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限55b6c882-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限

角色管理中新增彈框中的部門列表的數(shù)據(jù)權(quán)限

同樣調(diào)用的是SysDepartController中的depart/list的方法,邏輯見2.3節(jié)

55ce4796-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限55e2aca4-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限

操作案例

  1. 例如用戶debug用戶的角色為操作權(quán)限角色,分配部門為開發(fā)一部下面的測試部門
55f23390-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限
  1. 使用超級管理員,給操作權(quán)限角色分配數(shù)據(jù)權(quán)限,這里選擇新分配一個開發(fā)二部下面的測試部,如下圖所示:
5620da42-c9f4-11ed-bfe3-dac502259ad0.png數(shù)據(jù)權(quán)限
  1. 使用debug用戶登錄查詢
564137c4-c9f4-11ed-bfe3-dac502259ad0.png用戶登錄查詢

關(guān)于數(shù)據(jù)范圍權(quán)限的設(shè)計與實現(xiàn),你有什么好的方案?歡迎留言評論!



審核編輯 :李倩


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

    關(guān)注

    7

    文章

    2630

    瀏覽量

    47221
  • SaaS
    +關(guān)注

    關(guān)注

    1

    文章

    360

    瀏覽量

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

    關(guān)注

    0

    文章

    4

    瀏覽量

    6076
收藏 人收藏

    評論

    相關(guān)推薦

    基于SaaS模式的數(shù)字電視字幕控制系統(tǒng)

    【作者】:巫江;楊峰;唐繼勇;管金稱;【來源】:《電視技術(shù)》2010年02期【摘要】:介紹了基于SaaS模式的字幕控制系統(tǒng),實現(xiàn)分散編輯集中管理。通過使用XML作為中間標(biāo)準(zhǔn)數(shù)據(jù)傳輸格式
    發(fā)表于 04-23 11:21

    什么是SaaS?

    ,服務(wù)提供商會全權(quán)管理和維護軟件,對于許多小型企業(yè)來說,SaaS是采用先進技術(shù)的最好途徑,它消除了企業(yè)購買、構(gòu)建和維護基礎(chǔ)設(shè)施和應(yīng)用程序的需要。 SaaS模式逐漸在全球得到認可,并得到大范圍的普及
    發(fā)表于 07-13 09:23

    SaaS投資有哪些門道?

    般給用戶提供服務(wù)。企業(yè)主不用承擔(dān)高昂的服務(wù)器成本、忍受反人類的復(fù)雜系統(tǒng),依靠SaaS便能擁有一套簡單強大的企業(yè)管理系統(tǒng),高效化的運營不再只是一個PPT上的故事。一時之間,SaaS成為V
    發(fā)表于 08-18 09:56

    阿里云發(fā)布新版SaaS上云工具包,全面助力SaaS上云

    的應(yīng)用系統(tǒng)部署上去。這的確是通常意義的上云。 但對SaaS而言,有更多的維度需要考慮,經(jīng)過將近一年的探索,阿里云把SaaS上云定義為產(chǎn)品上云, 商品上市和服務(wù)上心, 簡稱三上:產(chǎn)品上云: 包含通常意義
    發(fā)表于 10-12 17:02

    入駐在線教育saas系統(tǒng)會面臨哪些問題?

    在線教育系統(tǒng)開辦在線教育的現(xiàn)象,將來很可能將受到管理和約束。3、品牌與數(shù)據(jù)綁架由于saas型教育系統(tǒng)本身的屬性,雖然入駐價格很具誘惑,但因為教育機構(gòu)的
    發(fā)表于 09-24 15:26

    奧威軟件SaaS BI系統(tǒng):一站式數(shù)據(jù)可視化解決方案

    BI系統(tǒng)SaaS化已成趨勢,越來越多的企業(yè)開始尋找SaaS BI系統(tǒng),以求以更低的成本實現(xiàn)數(shù)據(jù)
    發(fā)表于 08-01 10:21

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

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

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

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

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

    RBAC模型 數(shù)據(jù)權(quán)限 數(shù)據(jù)規(guī)則 關(guān)聯(lián)資源、用戶 繼續(xù)優(yōu)化 小結(jié) 在項目實際開發(fā)中我們不光要控制一個用戶能訪問哪些資源,還需要控制用戶只能訪問資源中的某部分數(shù)據(jù)。 控制一個用戶能訪問哪
    的頭像 發(fā)表于 10-11 17:50 ?1565次閱讀

    基于Saas多租戶數(shù)據(jù)范圍權(quán)限系統(tǒng)的簡單設(shè)計與實現(xiàn)

    數(shù)據(jù)權(quán)限用戶已經(jīng)分配且已經(jīng)擁有的部門(「已擁有制定部門的權(quán)利且已占用」),「作用是選擇了一個一級部門,那么一級部門所包含的二級部門,三級部門等也要賦值給用戶,也就是說擁有的部門下面還有子部門,那么也具有該部門以及子部門的擁有權(quán),使用遞歸算法全部遍歷獲得。
    發(fā)表于 03-24 11:36 ?1773次閱讀

    大型SaaS系統(tǒng)數(shù)據(jù)范圍權(quán)限的三種實現(xiàn)方案

    如果是基于請求頭攜帶租戶信息的情況,那么在使用中可能會遇到一個坑,如果當(dāng)使用多線程的時候,新開啟的異步線程并不會自動攜帶當(dāng)前線程的Request請求。
    發(fā)表于 04-26 09:14 ?857次閱讀

    基于Mybatis攔截器實現(xiàn)數(shù)據(jù)范圍權(quán)限

    前端的菜單和按鈕權(quán)限都可以通過配置來實現(xiàn),但很多時候,后臺查詢數(shù)據(jù)數(shù)據(jù)權(quán)限需要通過手動添加SQL來
    的頭像 發(fā)表于 06-20 09:57 ?1236次閱讀
    基于Mybatis攔截器<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>范圍</b><b class='flag-5'>權(quán)限</b>

    如何實現(xiàn)基于Mybatis攔截器實現(xiàn)數(shù)據(jù)范圍權(quán)限呢?

    前端的菜單和按鈕權(quán)限都可以通過配置來實現(xiàn),但很多時候,后臺查詢數(shù)據(jù)數(shù)據(jù)權(quán)限需要通過手動添加SQL來
    的頭像 發(fā)表于 06-20 09:59 ?1141次閱讀
    如何<b class='flag-5'>實現(xiàn)</b>基于Mybatis攔截器<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>范圍</b><b class='flag-5'>權(quán)限</b>呢?

    Saas多租戶數(shù)據(jù)范圍權(quán)限系統(tǒng)的簡單設(shè)計與實現(xiàn)

    在企業(yè)系統(tǒng)中,通過配置用戶的功能權(quán)限可以解決不同的人分管不同業(yè)務(wù)的需求,基于RBAC模型,RBAC(Role Based Access Control)模型,它的中文是基于角色的訪問控制,主要是將功能組合成角色,再將角色分配給用戶,也就是說「角色是功能的合集?!?/div>
    發(fā)表于 09-25 10:25 ?2014次閱讀
    <b class='flag-5'>Saas</b>多租戶<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>范圍</b><b class='flag-5'>權(quán)限</b><b class='flag-5'>系統(tǒng)</b>的簡單設(shè)計與<b class='flag-5'>實現(xiàn)</b>

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

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