From d7e0b229c6c1610bef3ac2e3613618c481214952 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Sat, 11 Oct 2025 00:43:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/routers/auth_router.py | 13 ++++++++----- src/storage/db/models.py | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/server/routers/auth_router.py b/server/routers/auth_router.py index d6288982..7b840a87 100644 --- a/server/routers/auth_router.py +++ b/server/routers/auth_router.py @@ -7,7 +7,7 @@ from pydantic import BaseModel from sqlalchemy.orm import Session from src.storage.db.manager import db_manager -from src.storage.db.models import User +from src.storage.db.models import User, OperationLog from server.utils.auth_middleware import get_admin_user, get_current_user, get_db, get_required_user from server.utils.auth_utils import AuthUtils from server.utils.user_utils import generate_unique_user_id, validate_username, is_valid_phone_number @@ -503,15 +503,18 @@ async def delete_user( detail="不能删除自己的账户", ) - # 记录操作 - log_operation( - db, current_user.id, "删除用户", f"删除用户: {user.username}, ID: {user.id}, 角色: {user.role}", request - ) + deletion_detail = f"删除用户: {user.username}, ID: {user.id}, 角色: {user.role}" + + # 清理关联的操作日志,避免外键约束报错 + db.query(OperationLog).filter(OperationLog.user_id == user.id).delete(synchronize_session=False) # 删除用户 db.delete(user) db.commit() + # 记录操作 + log_operation(db, current_user.id, "删除用户", deletion_detail, request) + return {"success": True, "message": "用户已删除"} diff --git a/src/storage/db/models.py b/src/storage/db/models.py index 15f413e3..29f84e3a 100644 --- a/src/storage/db/models.py +++ b/src/storage/db/models.py @@ -176,7 +176,7 @@ class User(Base): login_locked_until = Column(DateTime, nullable=True) # 锁定到什么时候 # 关联操作日志 - operation_logs = relationship("OperationLog", back_populates="user") + operation_logs = relationship("OperationLog", back_populates="user", cascade="all, delete-orphan") def to_dict(self, include_password=False): result = {