Skip to content

🔐 数据权限体系

  • 精细化数据权限控制,控制到行级列表级表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段。

数据权限背景

  • 在一般项目开发过程中,通常是不考虑数据操作|数据范围权限的情况下进行开发的,而在企业级项目中数据操作|数据范围动态配置动态授权是首选要考虑解决的问题。

数据权限技术选型

  • 采用 MyBatis-Plus 数据权限插件 DataPermissionInterceptor 功能实现。
  • DataPermissionInterceptor 是 MyBatis-Plus 提供的一个插件,用于实现数据权限控制。它通过拦截执行的 SQL 语句,并动态拼接权限相关的 SQL 片段,来实现对用户数据访问的控制。

数据权限实现原理:

  • DataPermissionInterceptor 的工作原理与租户插件类似,它会在 SQL 执行前拦截 SQL 语句,并根据用户权限动态添加权限相关的 SQL 片段。这样,只有用户有权限访问的数据才会被查询出来。

数据权限实现步骤:

第一步:实现数据权限逻辑

自定义 MultiDataPermissionHandler,实现特定业务逻辑。

public class CustomDataPermissionHandler extends MultiDataPermissionHandler {
    @Override
    public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
        // 在此处编写自定义数据权限逻辑
        try {
            String sqlSegment = "..."; // 数据权限相关的 SQL 片段
            return CCJSqlParserUtil.parseCondExpression(sqlSegment);
        } catch (JSQLParserException e) {
            e.printStackTrace();
            return null;
        }
    }
}

第二步:注册数据权限拦截器

将自定义的处理器注册到 DataPermissionInterceptor 中。

// 在 MyBatis 配置中
Interceptor dataPermissionInterceptor = new DataPermissionInterceptor(new CustomDataPermissionHandler());
mybatisConfiguration.addInterceptor(dataPermissionInterceptor);

通过使用 DataPermissionInterceptor,你可以轻松地在 MyBatis-Plus 应用中实现数据权限控制,确保用户只能访问其权限范围内的数据,从而提高数据的安全性。

注意:MyBatis-Plus 的数据权限方案,在 MyBatis XML 手写 SQL 时,是不生效的,不会自动拼接 WHERE 数据权限条件!