Merge branch 'feat/multi-tenant' into feat/iot-2.0

同步 multi-tenant 分支最新变更:
- feat(system): SSO 回调换 Token + OAuth2 客户端 platform 过滤菜单
- chore(tenant): Tenant RPC Feign 引入 ProjectCommonApi
- feat(web): API 访问日志 exclude-paths 过滤
- fix(iot): 轨迹检测防抖 + eventTime 修正
- perf(system): 项目授权校验优化 + isSuperAdmin 缓存切换
- feat(system): 超管绕过 user_project + 项目成员分页 API
- chore(ci): 部署磁盘预检 + 自动清理镜像
- chore: .gitattributes 统一行尾 LF

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-24 13:59:50 +08:00
40 changed files with 1929 additions and 628 deletions

View File

@@ -0,0 +1,51 @@
-- ============================================================
-- 多前端按 client → platform 过滤菜单
-- 配合后端代码AuthController.getPermissionInfo / MenuService.filterMenusByPlatform
-- 日期2026-04-20
--
-- platform 取值约定:
-- biz = 业务平台(对应 OAuth2 客户端 default
-- iot = 物联运维平台(对应 OAuth2 客户端 iot-client
-- NULL = 两个平台都展示(通用菜单,如系统管理、用户、部门等)
-- ============================================================
-- 1. system_oauth2_client 加 platform 列
ALTER TABLE `system_oauth2_client`
ADD COLUMN `platform` VARCHAR(10) NULL DEFAULT NULL
COMMENT '平台标识biz-业务平台iot-物联运维平台NULL-不按客户端过滤菜单'
AFTER `additional_information`;
-- 2. 矫正 system_menu.platform 列的注释(旧注释写的是 ops/sys与代码约定不一致更新为 biz/iot
ALTER TABLE `system_menu`
MODIFY COLUMN `platform` VARCHAR(10) NULL DEFAULT NULL
COMMENT '平台标识biz-业务平台iot-物联运维平台NULL-两个平台都展示';
-- 3. 给两个内部 SSO 客户端打 platform 标
-- 业务平台复用 yudao 默认 default 客户端 → biz
-- 物联运维平台用独立 iot-client → iot
UPDATE `system_oauth2_client` SET `platform` = 'biz' WHERE `client_id` = 'default';
UPDATE `system_oauth2_client` SET `platform` = 'iot' WHERE `client_id` = 'iot-client';
-- 4. 给 IoT 模块的菜单打 iot 标记。从 sql/mysql/system_menu.sql 看,
-- IoT 设备接入 root id=4000整个子树都属于 iot 平台。
UPDATE `system_menu` SET `platform` = 'iot'
WHERE `id` IN (
SELECT t.id FROM (
-- 递归取 4000 子树。MySQL 8 用 CTE旧版自行替换为多次 UPDATE
WITH RECURSIVE iot_tree(id) AS (
SELECT id FROM system_menu WHERE id = 4000
UNION ALL
SELECT m.id FROM system_menu m JOIN iot_tree it ON m.parent_id = it.id
)
SELECT id FROM iot_tree
) t
);
-- 5. 业务平台独有菜单标 biz可选不标的话默认 NULL = 两边都显示)
-- 例如 OA 示例id=5
-- UPDATE `system_menu` SET `platform` = 'biz' WHERE `id` IN (5);
-- 6. 系统管理 / 基础设施 / 用户 / 部门 / 字典 等通用菜单保持 NULL两边共用。
-- 7. 改完客户端后,记得在后台 OAuth2 客户端管理页面"保存"一次刷新缓存;
-- 或重启后端清缓存Redis key: oauth2_client

View File

@@ -0,0 +1,18 @@
-- ============================================================
-- 批量给「非 IoT 菜单」打上 platform='biz'
-- 策略iot 平台只看设备接入子树4000其余含系统管理、基础设施、OA、各 demo一律归业务平台
-- 日期2026-04-20
-- ============================================================
-- 所有 platform 还是 NULL 的,一律改为 biz
-- platform='iot' 的行已经在上一次迁移里设过,不会被动)
UPDATE system_menu
SET platform = 'biz'
WHERE deleted = 0 AND platform IS NULL;
-- 验证
SELECT platform, COUNT(*) AS cnt FROM system_menu WHERE deleted = 0 GROUP BY platform;
-- 预期:
-- biz = 大部分(系统管理/基础设施/OA/demos 等)
-- iot = 设备接入子树(~50
-- NULL = 0