CREATE TABLE IF NOT EXISTS chorus_admin_grouped_navigation_down_guard ( id TINYINT NOT NULL, CONSTRAINT chk_chorus_admin_grouped_navigation_down_guard CHECK (id = 0) ) ENGINE=InnoDB; DELETE FROM chorus_admin_grouped_navigation_down_guard; INSERT INTO chorus_admin_grouped_navigation_down_guard (id) SELECT 1 WHERE EXISTS ( SELECT 1 FROM sys_menu child JOIN sys_menu parent ON parent.menu_id = child.parent_id WHERE parent.path IN ( '/chorus/configuration', '/chorus/monitoring', '/chorus/access', '/chorus/system' ) AND child.path NOT IN ( '/chorus/providers', '/chorus/models', '/chorus/routes', '/chorus/templates', '/chorus/health', '/chorus/generations', '/chorus/users', '/chorus/api-keys', '/chorus/system/admins', '/chorus/system/roles', '/chorus/system/menus', '/chorus/system/apis', '/chorus/system/login-logs' ) ); DROP TABLE chorus_admin_grouped_navigation_down_guard; DELETE casbin FROM sys_casbin_rule casbin JOIN sys_api api ON casbin.ptype = 'p' AND casbin.v0 = 'chorus_operator' AND casbin.v1 = api.path AND casbin.v2 = api.action JOIN sys_menu_api_rule menu_api ON menu_api.sys_api_id = api.id JOIN sys_menu menu ON menu.menu_id = menu_api.menu_id WHERE menu.path LIKE '/chorus/system/%'; DELETE menu_api FROM sys_menu_api_rule menu_api JOIN sys_menu menu ON menu.menu_id = menu_api.menu_id WHERE menu.path IN ( '/chorus/system/admins', '/chorus/system/roles', '/chorus/system/menus', '/chorus/system/apis', '/chorus/system/login-logs' ); DELETE FROM sys_api WHERE handle LIKE 'chorus.system.%'; DELETE FROM sys_menu WHERE path IN ( '/chorus/system/admins', '/chorus/system/roles', '/chorus/system/menus', '/chorus/system/apis', '/chorus/system/login-logs' ); INSERT INTO sys_menu (menu_name, title, icon, path, paths, menu_type, action, permission, parent_id, no_cache, breadcrumb, component, sort, visible, is_frame) VALUES ('chorus', 'Chorus 运营', 'ri:magic-line', '/chorus', '', 'M', '', 'chorus:menu:view', 0, FALSE, 'Chorus 运营', 'Layout', 900, '0', '0') ON DUPLICATE KEY UPDATE menu_name = VALUES(menu_name), title = VALUES(title), icon = VALUES(icon), menu_type = VALUES(menu_type), action = VALUES(action), permission = VALUES(permission), parent_id = VALUES(parent_id), no_cache = VALUES(no_cache), breadcrumb = VALUES(breadcrumb), component = VALUES(component), sort = VALUES(sort), visible = VALUES(visible), is_frame = VALUES(is_frame), deleted_at = NULL; UPDATE sys_menu SET paths = CONCAT('/0/', menu_id) WHERE path = '/chorus'; UPDATE sys_menu child JOIN ( SELECT '/chorus/providers' AS child_path, '上游服务商' AS title, 10 AS sort_order UNION ALL SELECT '/chorus/models', '模型配置', 20 UNION ALL SELECT '/chorus/routes', '路由策略', 30 UNION ALL SELECT '/chorus/templates', '提示词模板', 40 UNION ALL SELECT '/chorus/health', '上游健康', 50 UNION ALL SELECT '/chorus/generations', '生成记录', 60 UNION ALL SELECT '/chorus/users', '用户管理', 70 UNION ALL SELECT '/chorus/api-keys', 'API 密钥', 80 ) desired ON desired.child_path = child.path JOIN sys_menu parent ON parent.path = '/chorus' SET child.parent_id = parent.menu_id, child.paths = CONCAT(parent.paths, '/', child.menu_id), child.title = desired.title, child.breadcrumb = CONCAT(parent.title, ' / ', desired.title), child.sort = desired.sort_order, child.deleted_at = NULL; INSERT IGNORE INTO sys_role_menu (role_id, menu_id) SELECT role_record.role_id, menu.menu_id FROM sys_role role_record JOIN sys_menu menu ON menu.path IN ( '/chorus', '/chorus/providers', '/chorus/models', '/chorus/routes', '/chorus/templates', '/chorus/health', '/chorus/generations', '/chorus/users', '/chorus/api-keys' ) WHERE role_record.role_key = 'chorus_operator'; DELETE FROM sys_menu WHERE path IN ( '/chorus/configuration', '/chorus/monitoring', '/chorus/access', '/chorus/system' );