# 数据权限模块 基于 MyBatis Plus 的数据权限控制模块,支持多种权限范围。 ## 引入依赖 ```xml com.mdframe.forge forge-starter-datascope ``` ## 权限范围 | 类型 | Code | 说明 | |------|------|------| | ALL | 1 | 全部数据权限 | | SELF | 2 | 本人数据权限 | | ORG | 3 | 本组织数据权限 | | ORG_AND_CHILD | 4 | 本组织及子组织数据权限 | | CUSTOM | 5 | 自定义数据权限 | | TENANT_ALL | 6 | 租户全部数据权限 | ## 使用示例 ### 配置数据权限 ```java // 在角色中配置数据权限范围 public class SysRole { private Long roleId; private String roleName; private Integer dataScope; // 数据权限范围 // ... } ``` ### 自定义权限配置 ```java // 配置自定义权限范围 public class SysDataScopeConfig { private Long configId; private Long roleId; private String tableName; private String scopeSql; // 自定义 SQL 条件 } ``` ### 在 Mapper 中使用 数据权限会自动拦截 SQL 并追加权限条件: ```java // 原始 SQL SELECT * FROM sys_user // 自动追加权限条件后 SELECT * FROM sys_user WHERE dept_id IN (1, 2, 3) ``` ## API 参考 ### IDataScopeService ```java public interface IDataScopeService { /** * 获取用户的数据权限 SQL */ String getDataScopeSql(Long userId, String tableName, String alias); /** * 获取用户的数据权限部门列表 */ List getDataScopeDeptIds(Long userId); } ``` ### DataScopeContextHolder ```java // 设置当前用户 ID DataScopeContextHolder.setUserId(userId); // 获取当前用户 ID Long userId = DataScopeContextHolder.getUserId(); // 清除上下文 DataScopeContextHolder.clear(); ``` ## 配置 ```yaml forge: datascope: enabled: true # 排除的表 exclude-tables: - sys_config - sys_dict_type ``` ## 自定义权限处理器 ```java @Component public class MyDataScopeHandler implements DataScopeHandler { @Override public String buildDataScopeSql(Long userId, String tableName, String alias) { // 自定义权限 SQL 构建逻辑 return "org_id = 1"; } } ``` ## 注意事项 1. 数据权限基于 MyBatis Plus 拦截器实现 2. 需要在用户登录时设置 DataScopeContextHolder 3. 自定义 SQL 需要使用 ${params.dataScope} 占位符 4. 复杂查询建议使用自定义权限处理器