gaoluyang
8 小时以前 f6c08840767a5b9c5d09870e94c0c83a46a3ccba
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
-- 质检单「完成」按钮权限
--
-- 背景:后端 MesQcIqc/Ipqc/Oqc/RqcController 的 /finish 接口分别校验
--       mes:qc-iqc:finish / mes:qc-ipqc:finish / mes:qc-oqc:finish / mes:qc-rqc:finish,
--       但 system_menu 中没有这四个权限码对应的按钮,导致非超管用户点击「完成」
--       直接返回 403「没有该操作权限」。
--
-- 本脚本幂等,可重复执行。执行后清理 Redis 中相关角色的 role_menu_ids 缓存,
-- 或让用户重新登录后生效。
 
-- 1. 补四个「完成」按钮,挂在各自质检列表菜单下
INSERT INTO system_menu (name, permission, type, sort, parent_id, status, icon, creator, updater)
SELECT s.name, s.permission, 3, 7, p.id, 0, '', '1', '1'
FROM system_menu p
JOIN (
    SELECT '来料检验完成' AS name, 'mes:qc-iqc:finish' AS permission, 'mes/qc/iqc/index' AS component
    UNION ALL SELECT '过程检验完成', 'mes:qc-ipqc:finish', 'mes/qc/ipqc/index'
    UNION ALL SELECT '出货检验完成', 'mes:qc-oqc:finish', 'mes/qc/oqc/index'
    UNION ALL SELECT '退料检验完成', 'mes:qc-rqc:finish', 'mes/qc/rqc/index'
) s ON p.component = s.component
WHERE p.type = 2 AND p.deleted = b'0'
  AND NOT EXISTS (
      SELECT 1 FROM system_menu m
      WHERE m.permission = s.permission AND m.deleted = b'0'
  );
 
-- 2. 授予已拥有对应质检列表菜单的角色
INSERT INTO system_role_menu (role_id, menu_id, creator, updater)
SELECT DISTINCT rm.role_id, m.id, '1', '1'
FROM system_role_menu rm
JOIN system_menu p ON p.id = rm.menu_id AND p.type = 2 AND p.deleted = b'0'
JOIN system_menu m ON m.parent_id = p.id AND m.deleted = b'0'
WHERE p.component IN ('mes/qc/iqc/index', 'mes/qc/ipqc/index', 'mes/qc/oqc/index', 'mes/qc/rqc/index')
  AND m.permission IN ('mes:qc-iqc:finish', 'mes:qc-ipqc:finish', 'mes:qc-oqc:finish', 'mes:qc-rqc:finish')
  AND rm.deleted = b'0'
  AND NOT EXISTS (
      SELECT 1 FROM system_role_menu x
      WHERE x.role_id = rm.role_id AND x.menu_id = m.id AND x.deleted = b'0'
  );