diff --git a/inventory-backend/app/__init__.py b/inventory-backend/app/__init__.py index 3de656b..c36bf11 100644 --- a/inventory-backend/app/__init__.py +++ b/inventory-backend/app/__init__.py @@ -142,8 +142,17 @@ def create_app(): except ImportError as e: print(f"❌ 错误: Audit 模块导入失败: {e}") + # 2.9 初始化审计日志菜单和权限(防重复) # ----------------------------------------------------- - # 2.9 注册库位管理模块 (Warehouse) + try: + from app.services.permission_service import PermissionService + with app.app_context(): + PermissionService.init_audit_menu() + except Exception as e: + print(f"⚠️ 审计日志菜单初始化跳过: {e}") + + # ----------------------------------------------------- + # 2.10 注册库位管理模块 (Warehouse) # ----------------------------------------------------- try: from app.api.v1.warehouse import warehouse_bp diff --git a/inventory-backend/app/services/permission_service.py b/inventory-backend/app/services/permission_service.py index 12a721c..884299f 100644 --- a/inventory-backend/app/services/permission_service.py +++ b/inventory-backend/app/services/permission_service.py @@ -147,3 +147,57 @@ class PermissionService: except Exception as e: session.rollback() raise e + + + @staticmethod + def init_audit_menu(): + """ + 初始化审计日志菜单和超级管理员权限 + 防重复:只插入不存在的记录 + """ + try: + # 1. 检查并创建审计日志菜单 + menu_code = 'system_audit' + existing_menu = SysMenu.query.filter_by(code=menu_code).first() + + if not existing_menu: + new_menu = SysMenu( + parent_id=0, + name='审计日志', + code=menu_code, + path='/system/audit', + sort_order=110, + is_visible=True + ) + db.session.add(new_menu) + db.session.flush() # 获取新插入的 ID + print(f"✅ 审计日志菜单已创建 (code: {menu_code})") + else: + print(f"ℹ️ 审计日志菜单已存在 (code: {menu_code})") + + # 2. 为超级管理员赋予审计日志菜单权限 + role_code = 'SUPER_ADMIN' + existing_perm = SysRolePermission.query.filter_by( + role_code=role_code, + target_code=menu_code + ).first() + + if not existing_perm: + new_perm = SysRolePermission( + role_code=role_code, + target_code=menu_code, + type='menu' + ) + db.session.add(new_perm) + print(f"✅ 超级管理员已赋予审计日志权限") + else: + print(f"ℹ️ 超级管理员已拥有审计日志权限") + + # 3. 提交 + db.session.commit() + return True + + except Exception as e: + db.session.rollback() + print(f"❌ 初始化审计日志菜单失败: {str(e)}") + raise e