🔐 数据权限体系
精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段。
数据权限背景
- 在一般项目开发过程中,通常是不考虑
数据操作|数据范围权限的情况下进行开发的,而在企业级项目中数据操作|数据范围的动态配置与动态授权是首选要考虑解决的问题。
数据权限技术选型
- 采用 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数据权限条件!