yanderong
2 天以前 686790777f722b0621bcc20e550d15965cda7b67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
-- =============================================================================
-- 2026-09-30 公司管理员菜单 path 与权限键(perms)对齐修复
-- -----------------------------------------------------------------------------
-- 背景:后端登录下发的权限集合取自 sys_menu.path(SysMenuMapper.selectMenuPermsByUserId
--       查询的是 m.path),本项目约定「菜单 path = 前端 accessKey = 接口权限键」。
--       20260930_company_admin_role_menu.sql 早期版本把新建菜单的 path 写成
--       '#'(按钮)、'list'(列表页)、'/card'(卡片管理目录),与权限键不一致,导致:
--         1) 公司账号登录后 permissions 缺 /fleet/list、/vinManagement/list、
--            /chargingCard/list 等键,车队/VIN/卡片菜单整块不显示(仅白名单可见);
--         2) /other/group-company/page 等接口鉴权失败(提示“没有权限”)。
-- 处理:按 perms 定位(不依赖 menu_id,跨环境安全),把相关菜单 path 改写为 perms。
-- 说明:仅更新 sys_menu.path 一列,不改菜单绑定关系;语句幂等,可重复执行;
--       与 20260930_company_admin_role_menu.sql 配合执行,两者先后顺序均可。
-- =============================================================================
USE charging_pile_other;
SET NAMES utf8mb4;
 
-- 1. 车队管理(列表页 + 6 个按钮)
UPDATE sys_menu SET path = '/fleet/list'   WHERE perms = '/fleet/list'   AND (path IS NULL OR path <> '/fleet/list');
UPDATE sys_menu SET path = '/fleet/add'    WHERE perms = '/fleet/add'    AND (path IS NULL OR path <> '/fleet/add');
UPDATE sys_menu SET path = '/fleet/edit'   WHERE perms = '/fleet/edit'   AND (path IS NULL OR path <> '/fleet/edit');
UPDATE sys_menu SET path = '/fleet/delete' WHERE perms = '/fleet/delete' AND (path IS NULL OR path <> '/fleet/delete');
UPDATE sys_menu SET path = '/fleet/status' WHERE perms = '/fleet/status' AND (path IS NULL OR path <> '/fleet/status');
UPDATE sys_menu SET path = '/fleet/import' WHERE perms = '/fleet/import' AND (path IS NULL OR path <> '/fleet/import');
UPDATE sys_menu SET path = '/fleet/export' WHERE perms = '/fleet/export' AND (path IS NULL OR path <> '/fleet/export');
 
-- 2. VIN 码管理(列表页 + 8 个按钮)
UPDATE sys_menu SET path = '/vinManagement/list'     WHERE perms = '/vinManagement/list'     AND (path IS NULL OR path <> '/vinManagement/list');
UPDATE sys_menu SET path = '/vinManagement/add'      WHERE perms = '/vinManagement/add'      AND (path IS NULL OR path <> '/vinManagement/add');
UPDATE sys_menu SET path = '/vinManagement/edit'     WHERE perms = '/vinManagement/edit'     AND (path IS NULL OR path <> '/vinManagement/edit');
UPDATE sys_menu SET path = '/vinManagement/delete'   WHERE perms = '/vinManagement/delete'   AND (path IS NULL OR path <> '/vinManagement/delete');
UPDATE sys_menu SET path = '/vinManagement/status'   WHERE perms = '/vinManagement/status'   AND (path IS NULL OR path <> '/vinManagement/status');
UPDATE sys_menu SET path = '/vinManagement/import'   WHERE perms = '/vinManagement/import'   AND (path IS NULL OR path <> '/vinManagement/import');
UPDATE sys_menu SET path = '/vinManagement/export'   WHERE perms = '/vinManagement/export'   AND (path IS NULL OR path <> '/vinManagement/export');
UPDATE sys_menu SET path = '/vinManagement/allocate' WHERE perms = '/vinManagement/allocate' AND (path IS NULL OR path <> '/vinManagement/allocate');
UPDATE sys_menu SET path = '/vinManagement/unbind'   WHERE perms = '/vinManagement/unbind'   AND (path IS NULL OR path <> '/vinManagement/unbind');
 
-- 3. 卡片管理(目录与列表页 path 同为 /chargingCard/list;含 6+2+2+1 个按钮)
UPDATE sys_menu SET path = '/chargingCard/list'     WHERE perms = '/chargingCard/list'     AND (path IS NULL OR path <> '/chargingCard/list');
UPDATE sys_menu SET path = '/chargingCard/add'      WHERE perms = '/chargingCard/add'      AND (path IS NULL OR path <> '/chargingCard/add');
UPDATE sys_menu SET path = '/chargingCard/edit'     WHERE perms = '/chargingCard/edit'     AND (path IS NULL OR path <> '/chargingCard/edit');
UPDATE sys_menu SET path = '/chargingCard/delete'   WHERE perms = '/chargingCard/delete'   AND (path IS NULL OR path <> '/chargingCard/delete');
UPDATE sys_menu SET path = '/chargingCard/status'   WHERE perms = '/chargingCard/status'   AND (path IS NULL OR path <> '/chargingCard/status');
UPDATE sys_menu SET path = '/chargingCard/import'   WHERE perms = '/chargingCard/import'   AND (path IS NULL OR path <> '/chargingCard/import');
UPDATE sys_menu SET path = '/chargingCard/export'   WHERE perms = '/chargingCard/export'   AND (path IS NULL OR path <> '/chargingCard/export');
UPDATE sys_menu SET path = '/chargingCard/allocate' WHERE perms = '/chargingCard/allocate' AND (path IS NULL OR path <> '/chargingCard/allocate');
UPDATE sys_menu SET path = '/chargingCard/unbind'   WHERE perms = '/chargingCard/unbind'   AND (path IS NULL OR path <> '/chargingCard/unbind');
 
-- 4. 白名单用户(导出/启停/解绑/额度分配;其余按钮 path 与 perms 原已一致)
UPDATE sys_menu SET path = '/appUserWhitelist/export'   WHERE perms = '/appUserWhitelist/export'   AND (path IS NULL OR path <> '/appUserWhitelist/export');
UPDATE sys_menu SET path = '/appUserWhitelist/status'   WHERE perms = '/appUserWhitelist/status'   AND (path IS NULL OR path <> '/appUserWhitelist/status');
UPDATE sys_menu SET path = '/appUserWhitelist/unbind'   WHERE perms = '/appUserWhitelist/unbind'   AND (path IS NULL OR path <> '/appUserWhitelist/unbind');
UPDATE sys_menu SET path = '/appUserWhitelist/allocate' WHERE perms = '/appUserWhitelist/allocate' AND (path IS NULL OR path <> '/appUserWhitelist/allocate');
 
-- 5. 卡片管理其余子页(刷卡充电订单、卡片收支明细):同批菜单同类修复,path 与权限键对齐
--    (公司账号未绑定这两个子页,此处修复的是平台/其他角色绑定的历史菜单)
UPDATE sys_menu SET path = '/cardChargingOrder'                WHERE perms = '/cardChargingOrder'                AND (path IS NULL OR path <> '/cardChargingOrder');
UPDATE sys_menu SET path = '/cardChargingOrder/detail'         WHERE perms = '/cardChargingOrder/detail'         AND (path IS NULL OR path <> '/cardChargingOrder/detail');
UPDATE sys_menu SET path = '/chargingCardBalanceDetail/list'   WHERE perms = '/chargingCardBalanceDetail/list'   AND (path IS NULL OR path <> '/chargingCardBalanceDetail/list');
UPDATE sys_menu SET path = '/chargingCardBalanceDetail/export' WHERE perms = '/chargingCardBalanceDetail/export' AND (path IS NULL OR path <> '/chargingCardBalanceDetail/export');
 
-- =============================================================================
-- 回查语句(人工核对,不参与脚本执行)
-- =============================================================================
-- R1. 期望 0:以上权限键对应菜单仍有 path <> perms 的记录
--   SELECT COUNT(*) FROM sys_menu WHERE perms IS NOT NULL AND (path IS NULL OR path <> perms)
--     AND (perms LIKE '/fleet%' OR perms LIKE '/vinManagement%'
--          OR perms LIKE '/chargingCard%' OR perms LIKE '/appUserWhitelist%');
-- R2. 公司账号权限集合(等价 selectMenuPermsByUserId,<userId> 替换为公司账号 user_id)
--   SELECT DISTINCT m.path FROM sys_menu m
--     JOIN sys_role_menu rm ON rm.menu_id = m.menu_id
--     JOIN sys_user_role ur ON ur.role_id = rm.role_id
--     JOIN sys_role r ON r.role_id = ur.role_id
--     WHERE m.status = '0' AND r.status = '0' AND ur.user_id = <userId>
--     ORDER BY m.path;
-- R3. 关键键命中(期望 7 行):/appUser、/appUserWhitelist/list、/chargingCard/list、
--     /fleet、/fleet/list、/vinManagement、/vinManagement/list
--   SELECT m.path FROM sys_menu m
--     JOIN sys_role_menu rm ON rm.menu_id = m.menu_id
--     JOIN sys_user_role ur ON ur.role_id = rm.role_id
--     JOIN sys_role r ON r.role_id = ur.role_id
--     WHERE m.status = '0' AND r.status = '0' AND ur.user_id = <userId>
--       AND m.path IN ('/appUser','/appUserWhitelist/list','/chargingCard/list',
--                      '/fleet','/fleet/list','/vinManagement','/vinManagement/list');