Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

springboot starter data authorization.md

lorne edited this page Dec 6, 2024 · 3 revisions

springboot-starter-data-authorization

数据权限框架

框架介绍

基于JDBC的拦截机制实现对数据表列与行的数据查询权限控制。

使用教程

  1. 配置数据库的JDBC驱动地址为 com.codingapi.springboot.authorization.jdbc.AuthorizationJdbcDriver
spring.datasource.driver-class-name=com.codingapi.springboot.authorization.jdbc.AuthorizationJdbcDriver
spring.datasource.url=jdbc:h2:file:./test.db
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
  1. 配置数据权限DataAuthorizationFilter的实现 接口定义
/**
 * 数据权限过滤器
 */
public interface DataAuthorizationFilter {
 /**
 * 列权限过滤
 * @param tableName 表名
 * @param columnName 列名
 * @param value 值
 * @return 过滤后的值
 * @param <T> T
 */
 <T> T columnAuthorization(String tableName, String columnName,T value);
 /**
 * 行权限过滤
 * @param tableName 表名
 * @param tableAlias 表别名
 * @return 过滤后拦截sql条件
 */
 Condition rowAuthorization(String tableName, String tableAlias);
 /**
 * 是否支持列权限过滤
 * @param tableName 表名
 * @param columnName 列名
 * @param value 值
 * @return 是否支持
 */
 boolean supportColumnAuthorization(String tableName, String columnName, Object value);
 /**
 * 是否支持行权限过滤
 * @param tableName 表名
 * @param tableAlias 表别名
 * @return 是否支持
 */
 boolean supportRowAuthorization(String tableName, String tableAlias);
}

实例实现:


ColumnMaskContext.getInstance().addColumnMask(new IDCardMask());
ColumnMaskContext.getInstance().addColumnMask(new PhoneMask());
ColumnMaskContext.getInstance().addColumnMask(new BankCardMask());
DataAuthorizationContext.getInstance().addDataAuthorizationFilter(new DataAuthorizationFilter() {
 @Override
 public <T> T columnAuthorization(String tableName, String columnName, T value) {
 return ColumnMaskContext.getInstance().mask(value);
 }
 @Override
 public Condition rowAuthorization(String tableName, String tableAlias) {
 if (tableName.equalsIgnoreCase("t_user")) {
 String conditionTemplate = "%s.id > 1 ";
 return Condition.formatCondition(conditionTemplate, tableAlias);
 }
 return null;
 }
 @Override
 public boolean supportColumnAuthorization(String tableName, String columnName, Object value) {
 return true;
 }
 @Override
 public boolean supportRowAuthorization(String tableName, String tableAlias) {
 return true;
 }
});

实现的拦截器,需要添加到DataAuthorizationContext.getInstance()中才可以使用。可以通过上述实例的手动模式添加, 也可以通过定义DataAuthorizationFilter的@Bean方式添加,当设置为@Bean时既可以自动加入到DataAuthorizationContext.getInstance()中。

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /