fix: clean orphaned permission tree nodes and enhance outbound search with material name/spec model

This commit is contained in:
DXC
2026-03-20 09:53:32 +08:00
parent 6336432a5c
commit 74089c7d7d
3 changed files with 42 additions and 7 deletions

View File

@ -447,6 +447,18 @@ class PermissionService:
('system_audit', '审计日志', '/system/audit', 'system_mgmt', 3),
]
# 第一步:清理根级别的冗余子菜单(这些本应是子节点,但可能之前被错误地创建为根节点)
child_codes = [m[0] for m in menu_defs if m[3] is not None] # 所有子菜单的code
orphaned_menus = SysMenu.query.filter(
SysMenu.code.in_(child_codes),
(SysMenu.parent_id == 0) | (SysMenu.parent_id.is_(None))
).all()
for menu in orphaned_menus:
print(f"🗑️ 清理根级别冗余菜单: {menu.code} ({menu.name})")
# 删除关联的权限
SysRolePermission.query.filter_by(target_code=menu.code).delete()
db.session.delete(menu)
# 创建或更新菜单
menu_map = {} # code -> menu obj