status: apply created: 2026-05-15 complexity: 🔴复杂
现有数据集发布后只依赖菜单/API权限和登录态控制,无法限制“哪些角色/用户可以使用指定数据集”,也没有把数据集查询结果纳入系统数据权限体系。
目标:
sys_role.data_scope、DataScopeInterceptor 的行为,新增能力默认保持兼容。forge/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/controller/DataDatasetController.java:数据集管理入口,包含分页、列表、详情、发布、预览。forge/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/controller/DataDatasetRuntimeController.java:运行时元数据和查询入口。forge/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/service/DataQueryExecutor.java:数据集运行时直接通过 JDBC 执行外部数据源 SQL,不走 MyBatis 查询。DataDatasetMapper.xml 查询 ai_report_data_dataset 时仅按租户、状态、发布状态过滤,没有数据集访问 ACL。DataScopeInterceptor 按 MyBatis mapperMethod 匹配 sys_data_scope_config 后改写 SQL,只覆盖 MyBatis 查询链路。DataScopeType.REGION 当前是本级 + 直接下级行政区划,不满足“盟市看区县和网格”这种所有后代要求。sys_region_code。PUBLIC,避免影响现有报表和数据资产管理。access_mode=PUBLIC 时保持现有行为。access_mode=PRIVATE 时,超级管理员、租户管理员、创建人、ACL 授权主体可访问。USER、ROLE、ORG,权限级别支持 VIEW、QUERY、MANAGE。QUERY 权限;元数据、列表、详情要求 VIEW 权限。| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 修改 | ai_report_data_dataset |
access_mode |
数据集访问模式,默认 PUBLIC |
| 新增 | ai_report_data_dataset_acl |
dataset_id/subject_type/subject_id/access_level |
数据集授权主体表 |
| 新增 | ai_report_data_dataset_row_scope |
dataset_id/enabled/*_column/region_strategy |
数据集行权限字段映射表 |
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 查询 | /data/dataset/page |
GET | 私有数据集按当前用户 ACL 过滤 |
| 查询 | /data/dataset/list |
GET | 私有数据集按当前用户 ACL 过滤 |
| 查询 | /data/dataset/{id} |
GET | 私有数据集校验 VIEW 权限并返回 ACL |
| 新增 | /data/dataset |
POST | 可保存 accessMode 和 aclItems |
| 修改 | /data/dataset |
PUT | 可保存 accessMode 和 aclItems |
| 查询 | /data/dataset/runtime/{id}/metadata |
GET | 校验 VIEW 权限 |
| 查询 | /data/dataset/runtime/query |
POST | 校验 QUERY 权限 |
| 新增/修改 | /data/dataset |
POST/PUT | 可保存 rowScope 行权限配置 |
forge-plugin-data 数据集模块。PUBLIC,行为保持不变。⚠️ 涉及权限变更,必须保持默认兼容。
forge-plugin-data 编译、数据集列表过滤、运行时权限校验、前端数据集编辑页 lint/build。sys_role.data_scope 和 DataScopeInterceptor。PUBLIC 作为默认值,确保升级后所有历史数据集仍可被原使用方访问。DataDatasetMapper.xml / DataDatasetAclMapper.xml,符合项目 SQL 约定。forge-starter-datascope,避免数据插件引入全局 MyBatis 拦截器影响现有服务。/*DATA_SCOPE*/ 占位符。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Task 1 | completed | forge-plugin-data ACL 模型、Mapper、Service、Controller、SQL;forge-admin-ui/src/api/data/dataset.ts |
阶段一:数据集访问权限,默认 PUBLIC 兼容 |
| Task 2 | completed | forge-plugin-data RowScope 模型、Mapper、Service、DataQueryExecutor、SQL |
阶段二:行权限配置与运行时过滤,默认关闭兼容 |
| Task 3 | completed | forge-admin-ui/src/views/data/dataset.vue、forge-admin-ui/src/api/data/dataset.ts |
阶段三:编辑向导第 4 步,访问 ACL 与行权限配置 |
三阶段已完成;未修改现有系统权限模块和 DataScopeInterceptor。数据集权限能力默认兼容:访问模式默认 PUBLIC,行权限默认关闭。