-- =============================================================================
|
-- 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');
|