变更范围:
ai_page_template 平台全局模板维护权限。执行结果:
git diff --check:通过。ai_ 表除 ai_page_template 外均已有 tenant_id;sys_ 缺口与 V1.0.56 覆盖范围一致。sys_dict_data、sys_dict_type、sys_flow_form、sys_login_log、sys_notice、sys_operation_log、sys_role、sys_role_resource、sys_user_social 存在 tenant_id IS NULL OR 0,已在迁移中回填到 1。sys_flow_model.model_key、sys_flow_business.uk_business_key、sys_flow_category.category_code、sys_flow_form.form_key、sys_flow_template.template_key、sys_flow_statistics.uk_process_date 与迁移脚本匹配。xmllint --noout --nonet:SysFileGroupMapper.xml、SysNoticeReadRecordMapper.xml、SysUserMapper.xml、SysRoleMapper.xml、SysUserTenantMapper.xml 均通过。JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-admin-server -am compile -DskipTests:通过,BUILD SUCCESS。警告和跳过项:
127.0.0.1:3407 MySQL 未启动,127.0.0.1:3306 root 无密码访问被拒绝;未在本轮实跑 Flyway 迁移。变更范围:
SessionHelper 新增超级管理员断言。/system/storage/config/options 供文件列表选择存储配置。/system/client/list 保留给菜单和角色页面使用,但仅返回客户端下拉需要的字段。执行结果:
git diff --check:通过。JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-admin-server -am compile -DskipTests:通过,BUILD SUCCESS。source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm build:通过,built in 55.10s。警告和跳过项:
// 注释、动态/静态混用 chunk 提示,不阻断本轮变更。变更范围:
V1.0.56__harden_tenant_isolation_boundaries.sql 在开发库执行失败的问题。UPDATE sys_dict_type SET tenant_id = 1 WHERE tenant_id IS NULL OR tenant_id = 0 触发唯一键 sys_dict_type.uk_tenant_dict_type,具体冲突为 sys_notice_status、sys_notice_type。sys_dict_type 和 sys_dict_data,再归一化到默认租户 1。执行结果:
forge_schema_history 当前 1.0.55 为最新成功版本,未保留失败的 1.0.56 行。mainClass,未进入应用启动也未触发 Flyway。forge/forge-admin-server 执行 JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn org.springframework.boot:spring-boot-maven-plugin:3.5.13:run -Dspring-boot.run.profiles=dev -DskipTests。Successfully applied 1 migration to schema forge_admin_new, now at version v1.0.56,应用随后成功启动到 Started ForgeAdminApplication。forge_schema_history:version=1.0.56、description=harden tenant isolation boundaries、success=1、execution_time=16827。sys_notice_status 仅保留 dict_id=44, tenant_id=1;sys_notice_type 仅保留 dict_id=43, tenant_id=1。sys_file_group、sys_file_metadata、sys_notice_org、sys_notice_read_record、sys_flow_model、sys_flow_business、sys_flow_category、sys_flow_cc、sys_flow_comment、sys_flow_condition_item、sys_flow_condition_rule、sys_flow_error_log、sys_flow_node_config、sys_flow_approval_level、sys_flow_statistics、sys_flow_task、sys_flow_template 均已具备 tenant_id。uk_flow_model_tenant_key、uk_flow_business_tenant_key、uk_flow_category_tenant_code、uk_flow_form_tenant_key、uk_flow_template_tenant_key、uk_flow_statistics_tenant_date。sys_user、sys_role、sys_role_resource、sys_user_role、sys_user_org、sys_dict_type、sys_dict_data、sys_notice、sys_file_group、sys_file_metadata、sys_notice_read_record、sys_flow_model、sys_flow_business、sys_flow_category、sys_flow_form、sys_flow_template 的 tenant_id IS NULL OR tenant_id = 0 均为 0;sys_notice_org 当前为空表。git diff --check:通过。警告和跳过项:
sys_flow_node_operation 在当前开发库不存在,迁移脚本按 information_schema 防护分支跳过。tenant_id = NULL、未知配置分组 security;均未阻断启动或迁移。DEFAULT.simpleTask 执行并写入少量 sys_job_log;未做清理,避免额外破坏性数据操作。jps -l 仅显示自身进程,无后端 Java 进程残留。