一、若依數據許可權的使用
若依數據許可權是一款基於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