-- ============================================================================= -- Current Release Delta: Legacy Analytics menu/RBAC permission closure -- Target: KingbaseES, schema public -- Scope: menu data only; this is not a system schema migration. -- -- ID allocation evidence at authoring time: -- public.sys_menu.menu_id is BIGINT NOT NULL with no default/identity; -- live MAX(menu_id) = 2176; therefore 2177..2180 are reserved below. -- The transaction fails unless the four page menu IDs still identify the -- expected components and every required permission is unique after execution. -- Existing role assignments are intentionally left unchanged. -- ============================================================================= BEGIN; DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2170 AND component = 'train/report' AND menu_type = 'C') THEN RAISE EXCEPTION 'Expected Report page menu 2170 was not found'; END IF; IF NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2171 AND component = 'train/checkin' AND menu_type = 'C') THEN RAISE EXCEPTION 'Expected Checkin page menu 2171 was not found'; END IF; IF NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2172 AND component = 'train/duration' AND menu_type = 'C') THEN RAISE EXCEPTION 'Expected Duration page menu 2172 was not found'; END IF; IF NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2173 AND component = 'train/portrait' AND menu_type = 'C') THEN RAISE EXCEPTION 'Expected Portrait page menu 2173 was not found'; END IF; IF EXISTS ( SELECT 1 FROM public.sys_role_menu rm WHERE rm.menu_id IN (2177, 2178, 2179, 2180) AND NOT EXISTS (SELECT 1 FROM public.sys_menu m WHERE m.menu_id = rm.menu_id) ) THEN RAISE EXCEPTION 'Reserved export menu ID has an orphan role assignment'; END IF; IF EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2177 AND NOT (parent_id = 2170 AND menu_type = 'F' AND perms = 'train:report:export')) OR EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2178 AND NOT (parent_id = 2171 AND menu_type = 'F' AND perms = 'train:attendance:export')) OR EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2179 AND NOT (parent_id = 2172 AND menu_type = 'F' AND perms = 'train:learning:export')) OR EXISTS (SELECT 1 FROM public.sys_menu WHERE menu_id = 2180 AND NOT (parent_id = 2173 AND menu_type = 'F' AND perms = 'train:portrait:export')) THEN RAISE EXCEPTION 'Reserved export menu ID collides with an unrelated menu'; END IF; END $$; UPDATE public.sys_menu SET perms = 'train:report:list', update_by = 'admin', update_time = CURRENT_TIMESTAMP WHERE menu_id = 2170 AND component = 'train/report' AND menu_type = 'C' AND perms IS DISTINCT FROM 'train:report:list'; UPDATE public.sys_menu SET perms = 'train:attendance:list', update_by = 'admin', update_time = CURRENT_TIMESTAMP WHERE menu_id = 2171 AND component = 'train/checkin' AND menu_type = 'C' AND perms IS DISTINCT FROM 'train:attendance:list'; UPDATE public.sys_menu SET perms = 'train:learning:list', update_by = 'admin', update_time = CURRENT_TIMESTAMP WHERE menu_id = 2172 AND component = 'train/duration' AND menu_type = 'C' AND perms IS DISTINCT FROM 'train:learning:list'; UPDATE public.sys_menu SET perms = 'train:portrait:query', update_by = 'admin', update_time = CURRENT_TIMESTAMP WHERE menu_id = 2173 AND component = 'train/portrait' AND menu_type = 'C' AND perms IS DISTINCT FROM 'train:portrait:query'; INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT 2177, '开班签到导出', 2170, 1, '#', '', '', 1, 0, 'F', '0', '0', 'train:report:export', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, 'Legacy Analytics V2导出权限' WHERE NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE perms = 'train:report:export'); INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT 2178, '课程签到导出', 2171, 1, '#', '', '', 1, 0, 'F', '0', '0', 'train:attendance:export', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, 'Legacy Analytics V2导出权限' WHERE NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE perms = 'train:attendance:export'); INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT 2179, '学习时长导出', 2172, 1, '#', '', '', 1, 0, 'F', '0', '0', 'train:learning:export', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, 'Legacy Analytics V2导出权限' WHERE NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE perms = 'train:learning:export'); INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT 2180, '学员画像导出', 2173, 1, '#', '', '', 1, 0, 'F', '0', '0', 'train:portrait:export', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, 'Legacy Analytics V2导出权限' WHERE NOT EXISTS (SELECT 1 FROM public.sys_menu WHERE perms = 'train:portrait:export'); DO $$ BEGIN IF (SELECT count(*) FROM public.sys_menu WHERE menu_id = 2170 AND perms = 'train:report:list') <> 1 OR (SELECT count(*) FROM public.sys_menu WHERE menu_id = 2171 AND perms = 'train:attendance:list') <> 1 OR (SELECT count(*) FROM public.sys_menu WHERE menu_id = 2172 AND perms = 'train:learning:list') <> 1 OR (SELECT count(*) FROM public.sys_menu WHERE menu_id = 2173 AND perms = 'train:portrait:query') <> 1 THEN RAISE EXCEPTION 'Legacy Analytics page permission update verification failed'; END IF; IF (SELECT count(*) FROM public.sys_menu WHERE perms = 'train:report:export' AND parent_id = 2170 AND menu_type = 'F') <> 1 OR (SELECT count(*) FROM public.sys_menu WHERE perms = 'train:attendance:export' AND parent_id = 2171 AND menu_type = 'F') <> 1 OR (SELECT count(*) FROM public.sys_menu WHERE perms = 'train:learning:export' AND parent_id = 2172 AND menu_type = 'F') <> 1 OR (SELECT count(*) FROM public.sys_menu WHERE perms = 'train:portrait:export' AND parent_id = 2173 AND menu_type = 'F') <> 1 THEN RAISE EXCEPTION 'Legacy Analytics export permission verification failed or permission is not unique'; END IF; END $$; COMMIT;