fix: 收敛日计划作业排序与授权范围

This commit is contained in:
zhouz
2026-08-14 15:55:42 +08:00
parent 8fc6fbb178
commit 9b4e2296fc
3 changed files with 30 additions and 11 deletions

View File

@@ -90,22 +90,43 @@ WHERE menu.id = COALESCE(
WHERE existing.parent_id=menu.id AND existing.permission=permission.code AND existing.deleted=b'0'
);
-- 已授权日计划作业菜单的角色同步获得该页面全部按钮权限。
-- 已授权日计划作业菜单的角色只自动获得查询权限,避免迁移过程扩大操作权限。
INSERT INTO system_role_menu
(role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id)
SELECT DISTINCT work_role.role_id, button.id, '1', NOW(), '1', NOW(), b'0', work_role.tenant_id
SELECT DISTINCT work_role.role_id, query_button.id, '1', NOW(), '1', NOW(), b'0', work_role.tenant_id
FROM system_role_menu work_role
JOIN system_menu work_menu ON work_menu.id=work_role.menu_id
AND work_menu.component='lms/daily-plan/work/index' AND work_menu.deleted=b'0'
JOIN system_menu button ON button.parent_id=work_menu.id AND button.type=3 AND button.deleted=b'0'
AND button.permission IN (
'lms:daily-plan:query', 'lms:daily-plan:start', 'lms:daily-plan:operate',
'lms:daily-plan:schedule', 'lms:daily-plan:strategy'
)
JOIN system_menu query_button ON query_button.parent_id=work_menu.id
AND query_button.permission='lms:daily-plan:query' AND query_button.deleted=b'0'
WHERE work_role.deleted=b'0'
AND NOT EXISTS (
SELECT 1 FROM system_role_menu existing
WHERE existing.role_id=work_role.role_id AND existing.menu_id=button.id
WHERE existing.role_id=work_role.role_id AND existing.menu_id=query_button.id
AND existing.tenant_id=work_role.tenant_id AND existing.deleted=b'0'
);
-- 其他作业按钮仅映射角色迁移前已拥有的同名权限,不因新增作业菜单而提权。
INSERT INTO system_role_menu
(role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id)
SELECT DISTINCT work_role.role_id, work_button.id, '1', NOW(), '1', NOW(), b'0', work_role.tenant_id
FROM system_role_menu work_role
JOIN system_menu work_menu ON work_menu.id=work_role.menu_id
AND work_menu.component='lms/daily-plan/work/index' AND work_menu.deleted=b'0'
JOIN system_menu work_button ON work_button.parent_id=work_menu.id AND work_button.type=3
AND work_button.permission IN (
'lms:daily-plan:start', 'lms:daily-plan:operate',
'lms:daily-plan:schedule', 'lms:daily-plan:strategy'
) AND work_button.deleted=b'0'
JOIN system_role_menu source_role ON source_role.role_id=work_role.role_id
AND source_role.tenant_id=work_role.tenant_id AND source_role.deleted=b'0'
JOIN system_menu source_button ON source_button.id=source_role.menu_id
AND source_button.permission=work_button.permission AND source_button.deleted=b'0'
AND source_button.id<>work_button.id
WHERE work_role.deleted=b'0'
AND NOT EXISTS (
SELECT 1 FROM system_role_menu existing
WHERE existing.role_id=work_role.role_id AND existing.menu_id=work_button.id
AND existing.tenant_id=work_role.tenant_id AND existing.deleted=b'0'
);