Add the Project navigation group alongside Market, Production and Quality. Preserve existing leaf IDs and role grants while migrating the menu hierarchy, keep legacy URLs redirecting, and align frontend/backend menus.
52 lines
3.0 KiB
SQL
52 lines
3.0 KiB
SQL
-- Issue #13:在项目管理菜单种子之后执行,可重复执行。
|
|
-- 项目与市场使用同一 Web 虚拟根;不创建/改动移动根或移动菜单。
|
|
-- 保留四个叶子菜单及按钮 ID,仅迁移父级和路由;已有角色只补新祖先权限。
|
|
START TRANSACTION;
|
|
|
|
INSERT INTO sys_menu (id, menu_name, parent_id, menu_type, path, component, perms,
|
|
is_frame, visible, status, tenant_no, order_num, create_dept_id, create_time, update_time, del_flag)
|
|
SELECT MD5(CONCAT(market.tenant_no, ':menu:project')), '项目', market.parent_id, 'M',
|
|
'/project', '/index/index', 'menu:project', 1, '1', '1', market.tenant_no,
|
|
COALESCE(market.order_num, 1) - 1, '', NOW(), NOW(), 0
|
|
FROM sys_menu market
|
|
WHERE market.perms='menu:market' AND market.del_flag=0
|
|
AND NOT EXISTS (SELECT 1 FROM sys_menu existing
|
|
WHERE existing.tenant_no=market.tenant_no AND existing.perms='menu:project');
|
|
|
|
UPDATE sys_menu leaf
|
|
JOIN sys_menu top_menu ON top_menu.tenant_no=leaf.tenant_no
|
|
AND top_menu.perms='menu:project' AND top_menu.del_flag=0
|
|
SET leaf.parent_id=top_menu.id,
|
|
leaf.path=CASE leaf.perms
|
|
WHEN 'project:team:list' THEN 'teams'
|
|
WHEN 'project:project:list' THEN 'projects'
|
|
WHEN 'project:statistics:list' THEN 'statistics'
|
|
WHEN 'project:assignment:edit' THEN 'assignments' END,
|
|
leaf.menu_name=CASE WHEN leaf.perms='project:assignment:edit'
|
|
THEN '历史归属维护' ELSE leaf.menu_name END,
|
|
leaf.update_time=NOW()
|
|
WHERE leaf.del_flag=0 AND leaf.perms IN (
|
|
'project:team:list', 'project:project:list', 'project:statistics:list', 'project:assignment:edit');
|
|
|
|
-- 仅拥有项目子菜单/按钮的角色补齐“项目”及原 Web 虚拟根,不给仅有市场权限的角色新增业务权限。
|
|
INSERT INTO sys_role_menu (id, role_id, menu_id, tenant_no, create_dept_id, create_time, update_time, del_flag)
|
|
SELECT DISTINCT MD5(CONCAT(grant_row.tenant_no, ':project-ancestor:', grant_row.role_id, ':', ancestor.id)),
|
|
grant_row.role_id, ancestor.id, grant_row.tenant_no, '', NOW(), NOW(), 0
|
|
FROM sys_role_menu grant_row
|
|
JOIN sys_role role_row ON role_row.id=grant_row.role_id AND role_row.tenant_no=grant_row.tenant_no
|
|
AND role_row.del_flag=0
|
|
JOIN sys_menu leaf ON leaf.id=grant_row.menu_id AND leaf.tenant_no=grant_row.tenant_no
|
|
AND leaf.del_flag=0 AND leaf.perms IN ('project:team:list', 'project:project:list',
|
|
'project:statistics:list', 'project:assignment:edit', 'project:team:edit', 'project:project:edit')
|
|
JOIN sys_menu top_menu ON top_menu.tenant_no=grant_row.tenant_no
|
|
AND top_menu.perms='menu:project' AND top_menu.del_flag=0
|
|
JOIN sys_menu ancestor ON ancestor.tenant_no=grant_row.tenant_no AND ancestor.del_flag=0
|
|
AND (ancestor.id=top_menu.id OR ancestor.id=top_menu.parent_id)
|
|
WHERE grant_row.del_flag=0
|
|
AND NOT EXISTS (SELECT 1 FROM sys_role_menu existing
|
|
WHERE existing.tenant_no=grant_row.tenant_no AND existing.role_id=grant_row.role_id
|
|
AND existing.menu_id=ancestor.id AND existing.del_flag=0)
|
|
ON DUPLICATE KEY UPDATE del_flag=0, update_time=NOW();
|
|
|
|
COMMIT;
|