若依數據許可權詳解

一、若依數據許可權的使用

若依數據許可權是一款基於Spring Boot與Vue.js的開源許可權管理系統,其數據許可權是指用戶在系統中對於數據的訪問控制,主要包括菜單許可權、按鈕許可權、數據許可權等。其中,數據許可權是數個中最為核心也最為複雜的一個。若依數據許可權可以在系統中設定數據許可權規則,根據用戶具有的角色,用於控制用戶在系統中能夠訪問哪些數據。使用若依數據許可權可以實現:從後台控制前端頁面的顯示和功能操作的許可權控制,加強系統保密性和機密性;配置數據許可權規則,在數據訪問量大時減輕伺服器的壓力等。

二、若依數據許可權過濾

若依數據許可權過濾是系統在實現數據許可權的核心技術。過濾操作是通過Mybatis的插件機制實現,MyBatis將執行SQL請求到資料庫時,數據許可權過濾器攔截請求,改寫SQL語句,並將修改後的SQL語句進行重新查詢。具體來說:當用戶在前端界面選擇查詢的數據範圍時,若依數據許可權系統會將查詢條件轉換為符合數據許可權規則的查詢條件,利用查詢條件會根據Mybatis的interceptor機制對於查詢的數據進行過濾。

三、若依數據許可權案例

我們以一個簡單的人員管理系統為例,該系統有許可權的管理,不同的用戶角色看到的列表也有要求的不同。

    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List selectUserList(SysUser user) {
        return userMapper.selectUserList(user);
    }

上述代碼中,我們在service介面的實現類中重寫了分頁查詢功能,在方法中添加了@DataScope註解,通過deptAlias設置數據許可權部門別名,userAlias設置數據許可權用戶別名,這樣就可以根據不同用戶的登錄角色控制他們訪問的數據不同。

四、若依數據許可權如何實現的

若依數據許可權實現的主要核心是使用攔截器實現的Mybatis插件機制。簡單的實現思路是,在Mybatis執行SQL請求到資料庫時,將其攔截,改寫SQL語句,增加where條件,將查詢根據數據許可權的要求進行過濾。

五、若依數據許可權實現

若依數據許可權的實現是通過Mybatis的攔截器機制實現的。具體操作為:定義一個攔截器,在執行Mybatis中Executor的query方法的時候,使用ParserSQLVisitor解析sql語句,然後獲取到AST節點,解析出查詢條件後,執行DataScopeInterceptor的interceptor方法。該過程中可以從線程安全的ThreadLocal中獲取登錄用戶信息,並結合自定義註解等實現數據許可權攔截。最終將修改過後的SQL語句重新查詢,從而實現數據許可權的管理。

六、若依數據許可權自定義怎麼設置

設置若依數據許可權,需要先啟用數據許可權,在數據源中添加配置

    ## Druid 連接池中添加過濾器
    spring.datasource.druid.filter-stat.log-slow-sql=true

然後,我們還需要在若依數據許可權的配置文件中添加數據許可權配置,如下:

    ## 數據許可權配置
    ## 表示自定義數據許可權語法構造方法的全限定名,程序通過反射來構造
    ifoxconn.data-scope.interceptor-class-name=com.ruoyi.common.datascope.CustomDataScopeInterceptor

七、若依數據許可權控制

若依數據許可權控制主要有以下實現方式:

1、使用註解設置數據許可權

    //若數據許可權註解
    @DataScope(數據許可權部門別名 = "dept",數據許可權用戶別名= "user")

2、使用註解+過濾

    @Bean("若依數據許可權攔截器")
    public DataScopeInterceptor dataScopeInterceptor()
    {
        return new DataScopeInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        InterceptorRegistration addInterceptor = registry.addInterceptor(若依數據許可權攔截器");
        // 許可權控制
        addInterceptor.addPathPatterns("/**");
    }

3、全局解析器過濾

    @Bean
    public GlobalConfiguration globalConfiguration() {
        GlobalConfiguration globalConfiguration = new GlobalConfiguration();
        //全局設置 SQL 解析處理鏈   注意:該配置只對當前初始化的 SqlSessionFactory 生效
        globalConfiguration.setSqlParser(new TenantSqlParser());
        return globalConfiguration;
    }

八、若依數據許可權分頁

若依數據許可權分頁可以通過PageHelper來實現。我們在查詢時添加分頁操作,如下:

    //設置分頁信息
    PageHelper.startPage(1, 10);
    //查詢數據
    List list = tableMapper.selectList(null);
    //分頁對象
    PageInfo
pageInfo = new PageInfo(list);

九、若依數據許可權管理

若依數據許可權管理主要通過後台管理界面實現,管理員可以在管理界面進行數據許可權的配置和規則的管理。同時,若依數據許可權還提供了圖形化的許可權查看,可對用戶在系統中的功能使用進行自定義授權和管理。管理員在後台還可以設置數據許可權規則,定義不同部門、不同用戶等的訪問許可權,並針對某些數據設置過濾規則。

十、若依數據許可權怎麼用

若依數據許可權用於數據過濾方面,主要可以在查詢資料庫的時候使用。在使用 Mybatis 查詢時,可以通過@Select註解使用。

    @DataScope(deptAlias = "d", userAlias = "u")
    @Select("select * from user where name = 'zhangsan' ")
    User selectUserInfo();

在上述示例中,我們使用@DataScope,定義了數據許可權別名,調用selectUserInfo可以實現對於查詢結果的過濾。

以上就是若依數據許可權的全部內容,可以看到若依數據許可權的應用非常廣泛,尤其在系統安全性和數據保密性方面有著得天獨厚的優勢。同時,若依數據許可權的實現也不是很複雜,只需要按照一定邏輯進行數據的攔截過濾和SQL語句的改寫即可。但是要注意,在數據量較大的情況下,數據過濾的效率問題也需要特別關注。針對這個問題,在後續的開發中,我們可以根據具體情況對引擎進行優化,提高查詢效率,進一步提高應用的性能。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/258128.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:48
下一篇 2024-12-15 12:48

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29

發表回復

登錄後才能評論