本系统实现了基于 create_by 字段的数据隔离机制:
com.payroll.filter.CreateByDataInterceptorcreate_by = 当前用户ID 的过滤条件com.payroll.utils.SecurityUtilsgetCurrentUserId(): 获取当前登录用户IDisSuperAdmin(): 判断是否为超级管理员com.payroll.config.MyMetaObjectHandlercreate_by 和 update_by 字段create_by 字段update_by 字段AND create_by = 当前用户ID超级管理员的判断依据(满足任一条件即可):
@Configuration
public class MybatisPlusConfig {
@Autowired
private CreateByDataInterceptor createByDataInterceptor;
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 添加基于create_by的数据权限拦截器
interceptor.addInnerInterceptor(new DataPermissionInterceptor(createByDataInterceptor));
return interceptor;
}
}
假设有一个员工表查询:
-- 原始SQL
SELECT * FROM sys_employee WHERE status = 1
-- 普通用户看到的实际SQL
SELECT * FROM sys_employee WHERE status = 1 AND create_by = 123
-- 超级管理员看到的实际SQL
SELECT * FROM sys_employee WHERE status = 1
create_by 字段可以通过以下方式验证数据隔离是否生效: