Java实战:MyBatis-Plus 使用拦截器实现数据权限控制
import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.TenantLineHandler;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.StringValue;
public class DataPermissionInterceptor extends TenantLineInnerInterceptor {
@Override
public Expression getTenantId() {
// 假设当前用户的租户ID是"tenant1"
return new StringValue("'tenant1'");
}
@Override
public String getTenantIdColumn() {
// 假设数据表中包含租户ID的字段名为tenant_id
return "tenant_id";
}
@Override
public boolean ignoreTable(String tableName) {
// 忽略不需要租户筛选的表
return "ignore_table".equals(tableName);
}
@Override
public void beforeQuery(ISqlParser parser, TenantLineHandler tenantLineHandler, String sql, List<Object> parameters) {
// 在SQL查询前执行的逻辑
}
}
这个代码示例展示了如何扩展TenantLineInnerInterceptor
类来实现租户行为,并重写了getTenantId
和getTenantIdColumn
方法以提供租户ID和租户ID字段名。还展示了如何使用ignoreTable
方法来忽略不需要租户筛选的表。最后,beforeQuery
方法可以用来在SQL查询前执行自定义逻辑。
评论已关闭