基于 MyBatis Plus 的数据权限控制模块,支持多种权限范围。
<dependency>
<groupId>com.mdframe.forge</groupId>
<artifactId>forge-starter-datascope</artifactId>
</dependency>
| 类型 | Code | 说明 |
|---|---|---|
| ALL | 1 | 全部数据权限 |
| SELF | 2 | 本人数据权限 |
| ORG | 3 | 本组织数据权限 |
| ORG_AND_CHILD | 4 | 本组织及子组织数据权限 |
| CUSTOM | 5 | 自定义数据权限 |
| TENANT_ALL | 6 | 租户全部数据权限 |
// 在角色中配置数据权限范围
public class SysRole {
private Long roleId;
private String roleName;
private Integer dataScope; // 数据权限范围
// ...
}
// 配置自定义权限范围
public class SysDataScopeConfig {
private Long configId;
private Long roleId;
private String tableName;
private String scopeSql; // 自定义 SQL 条件
}
数据权限会自动拦截 SQL 并追加权限条件:
// 原始 SQL
SELECT * FROM sys_user
// 自动追加权限条件后
SELECT * FROM sys_user WHERE dept_id IN (1, 2, 3)
public interface IDataScopeService {
/**
* 获取用户的数据权限 SQL
*/
String getDataScopeSql(Long userId, String tableName, String alias);
/**
* 获取用户的数据权限部门列表
*/
List<Long> getDataScopeDeptIds(Long userId);
}
// 设置当前用户 ID
DataScopeContextHolder.setUserId(userId);
// 获取当前用户 ID
Long userId = DataScopeContextHolder.getUserId();
// 清除上下文
DataScopeContextHolder.clear();
forge:
datascope:
enabled: true
# 排除的表
exclude-tables:
- sys_config
- sys_dict_type
@Component
public class MyDataScopeHandler implements DataScopeHandler {
@Override
public String buildDataScopeSql(Long userId, String tableName, String alias) {
// 自定义权限 SQL 构建逻辑
return "org_id = 1";
}
}