基于ADS Mybatis Plus實現(xiàn)數(shù)據(jù)權限功能

數(shù)字化系統(tǒng)中常常遇到一些數(shù)據(jù)權限的需求,比如希望將用戶分組,將不同組的數(shù)據(jù)隔離開。

本文描述的是關于這種需求的一種實現(xiàn)方案。

ADS說明

Application Data Shield (ADS)是我開源的一個框架,核心思想是,將數(shù)據(jù)實體用某個字段標記,這個字段可以驅動ADS,來對數(shù)據(jù)進行分割,保護。ADS可以用來實現(xiàn)多種功能,比如數(shù)據(jù)權限。

例如如下數(shù)據(jù)表:

create table if not exists class_material (
    class_id int not null,
    material_name varchar(255) not null
);

這是一張班級物品表,用此表來舉例解釋上面的意思:如果一個學生屬于班級1,那么他訪問到的只有班級1的物品,這是ADS的一種使用場景。

實例

ADS目前只有有mybatis plus springboot starter版本,基于這個starter,用戶可以通過簡單的配置實現(xiàn)一些功能,如數(shù)據(jù)權限,多租戶等等。

以下通過ADS實現(xiàn)數(shù)據(jù)權限功能,代碼請見https://github.com/player-sontan/ads-mp/tree/main/ads-mp-spring-boot-starter-example

配置ADS

  1. 定義DriverType

     代碼見 org.ads.test.ads.cls.ClassDriver
    
    如前文描述,DriverType是ADS的一種驅動,DriverType的名字是重要的,請查看application配置文件,其中用到了DriverType的名字
    
    
  2. 定義AssetsProvider

     代碼見org.ads.test.ads.cls.ClassAssetsProvider
    
    這個實例要實現(xiàn)的功能是,把用戶具有權限的class id列表提供給ADS
    
    
  3. 實現(xiàn)AdsManagerConfigurer 接口,配置ADS

     代碼見org.ads.test.ads.AdsCustomConfigurer
    
    1,2兩步實現(xiàn)的組件需要通過這個配置注冊到ADS
    
    
  4. 注冊mybatis plus插件

     代碼見org.ads.test.MybatisPlusConfiguration
    
    通過MybatisPlus的插件功能,把ADS插件注冊到Mybatis Plus中
    
    
  5. 在配置文件中使用ADS

    # 代碼見application.yaml
    ads:
    # ads 默認為關閉狀態(tài)
      enabled: true
      data-shields:
      # 配置class_material表的data shield
        class_material:
          driver-type: CLASS
          column-name: class_id
    

經(jīng)過如上配置,ADS就配置好了,可以運行測試用例org.ads.test.SimpleTest#should_see_personal_class_materials 查看效果:

Amy屬于1班,當Amy登錄系統(tǒng),她只能看到1班的數(shù)據(jù)。

以上就是基于ADS實現(xiàn)數(shù)據(jù)權限的方法,對于復雜的場景,這里沒有演示,但ADS基于其底層思想,支持各種復雜的場景,歡迎使用,貢獻代碼。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容