109 lines
6.7 KiB
PL/PgSQL
109 lines
6.7 KiB
PL/PgSQL
-- =============================================================================
|
|
-- 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;
|