Files
shanxia2.0/docs/sql/migrations/2026-11-06-mini-cert-tab-perms.sql
T
wuzilongandCursor 66bad6b219 fix(pl): 拆分小程序运输证件页签权限,并让证书齐备列表避开证件类型路由。
页签按独立菜单显示,销售办证员默认不含证书齐备;证书齐备接口先于通配证件路径注册,避免 plans 被当成证件类型。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-07 12:19:28 +08:00

73 lines
3.2 KiB
SQL

-- 小程序「运输证件管理」五个页签拆成独立权限。
-- 已有入口权限的角色默认获得全部页签;销售办证员不获得「证书齐备」,与 Web 端已取消的授权一致。
-- MySQL 5.7。可重复执行。仅 shanxia2.0。
SET NAMES utf8mb4;
START TRANSACTION;
INSERT INTO sys_menu (
id, menu_name, parent_id, menu_type, path, component, perms,
is_frame, visible, status, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_time, del_flag
)
SELECT
item.id, item.menu_name, parent.id, 'F', '', NULL, item.perms,
1, '1', '1', parent.tenant_no, item.sort_no, '小程序运输证件页签权限',
'system', '', NOW(), NOW(), 0
FROM sys_menu parent
JOIN sys_menu folder ON folder.id = parent.parent_id
AND folder.tenant_no = parent.tenant_no AND folder.del_flag = 0
JOIN sys_menu root ON root.id = folder.parent_id
AND root.tenant_no = parent.tenant_no AND root.del_flag = 0
AND root.parent_id = '0' AND root.path = '/mini'
CROSS JOIN (
SELECT 'MINI_PL_CERT_ARCHIVE' id, '证件建档' menu_name, 'mini:pl:quota-cert:list' perms, 1 sort_no
UNION ALL SELECT 'MINI_PL_CERT_CONTRACT', '合同用证', 'mini:pl:contract-quota:list', 2
UNION ALL SELECT 'MINI_PL_CERT_USAGE', '证件用量', 'mini:pl:certificate-usage:list', 3
UNION ALL SELECT 'MINI_PL_CERT_SEGMENT', '计划段次用证', 'mini:pl:plan-cert:segment', 4
UNION ALL SELECT 'MINI_PL_CERT_READY', '证书齐备', 'mini:pl:cert-ready:list', 5
) item
WHERE parent.id = '329823eb-e3af-49b2-b656-08f2c2a713f3'
AND parent.tenant_no = 'shanxia2.0' AND parent.del_flag = 0
AND parent.perms = 'mini:pl:plan-cert:list'
AND NOT EXISTS (
SELECT 1 FROM sys_menu existing
WHERE existing.id = item.id
OR (existing.tenant_no = parent.tenant_no AND existing.del_flag = 0 AND existing.perms = item.perms)
);
INSERT INTO sys_role_menu (
id, role_id, menu_id, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_time, del_flag
)
SELECT
MD5(CONCAT(access_row.role_id, '|', item.id, '|mini-cert-tab|v1')),
access_row.role_id, item.id, access_row.tenant_no, 0,
'小程序运输证件页签:沿用原入口授权',
'system', '', NOW(), NOW(), 0
FROM sys_role_menu access_row
JOIN sys_role role_row ON role_row.id = access_row.role_id
AND role_row.tenant_no = access_row.tenant_no AND role_row.del_flag = 0
JOIN sys_menu item ON item.parent_id = '329823eb-e3af-49b2-b656-08f2c2a713f3'
AND item.tenant_no = access_row.tenant_no AND item.del_flag = 0
AND item.perms IN (
'mini:pl:quota-cert:list',
'mini:pl:contract-quota:list',
'mini:pl:certificate-usage:list',
'mini:pl:plan-cert:segment',
'mini:pl:cert-ready:list'
)
WHERE access_row.del_flag = 0
AND access_row.tenant_no = 'shanxia2.0'
AND access_row.menu_id = '329823eb-e3af-49b2-b656-08f2c2a713f3'
AND NOT (item.perms = 'mini:pl:cert-ready:list' AND role_row.role_name = '销售办证员')
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu existing
WHERE existing.role_id = access_row.role_id
AND existing.menu_id = item.id
AND existing.tenant_no = access_row.tenant_no
AND existing.del_flag = 0
)
ON DUPLICATE KEY UPDATE del_flag = 0, update_time = NOW();
COMMIT;