Skip to content

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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy