暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MybatisPlus实现数据权限过滤

IT那活儿 2025-02-11
345
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  

MyBatis-Plus 简介

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,旨在简化开发和提高效率。它在 MyBatis 的基础上提供了丰富的功能,如自动化的 CRUD 操作、分页插件、性能分析插件等,极大地提高了开发者的工作效率。

MP 允许开发者通过简单的配置实现复杂的数据库操作,减少了重复的代码编写。


MyBatis-Plus 数据权限插件介绍

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

DataPermissionInterceptor 是实现这一功能的核心,它利用JSQLParser库解析和修改SQL语句。


MyBatis-Plus 与 Spring Boot 整合

在 Spring Boot 项目中整合 MyBatis-Plus 非常简单。以下是整合的步骤:

3.1 创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的项目,并选择以下依赖:
  • Spring Web
  • MyBatis-Plus
  • MySQL Driver
3.2 添加依赖
在 pom.xml 文件中添加 MyBatis-Plus 的相关依赖:
xml

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.4</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

3.3 配置数据库连接
在 application.yaml 中配置数据库连接信息:
yaml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
    username: root
    password: root
mybatis-plus:
  mapper-locations: classpath*:mappers/**/*.xml


数据权限过滤器实现步骤

4.1 创建注解类
定义一个注解,用于标识需要进行数据权限控制的SQL。
4.2 创建处理类
实现MultiDataPermissionHandler接口,获取数据权限SQL片段,并设置where条件。
4.3 注册拦截器
将数据权限拦截器添加到Mybatis-Plus插件中。

以下是代码示例:

1)注解定义

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataScope {
    boolean enabled() default true;
    String tableAlias() default "";
    String oneselfScopeName() default "create_id";
}

2)处理类实现

public class DataScopePlusHandler implements MultiDataPermissionHandler {
    @Override
    public String getSqlSegment(List<TableInfo> tableInfos) {
        StringBuilder sql = new StringBuilder();
        // 根据用户角色和部门动态生成SQL片段
        sql.append(" WHERE department_id IN (SELECT dept_id FROM user_department WHERE user_id = #{userId})");
        return sql.toString();
    }
}

3注册拦截器

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new DataPermissionInterceptor(new DataScopePlusHandler()));
    return interceptor;
}

4)使用注解

在Mapper接口中,使用@DataScope注解来标识需要进行数据权限控制的SQL。

public interface UserMapper extends BaseMapper<User{
    @DataScope
    List<User> selectUsers();
}


总 结

通过 MyBatis-Plus 的数据权限插件,可以非常方便地实现数据权限过滤。开发者只需创建自定义拦截器并在其中添加权限判断逻辑,即可根据用户角色和部门动态过滤查询结果。这种方式不仅提高了数据安全性,也简化了代码的复杂性,使得数据权限管理更加灵活和高效。

然而,这只是一个基础版本,实际项目中可能需要更复杂的逻辑来处理不同的数据权限需求。


END


本文作者:赵璐璐(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论