fix(auth): 添加检查以防止删除部门唯一管理员账户

This commit is contained in:
Wenjie Zhang 2026-01-19 20:49:29 +08:00
parent 67bcd26565
commit 2836ff09cf

View File

@ -4,7 +4,7 @@ import uuid
from fastapi import APIRouter, Depends, HTTPException, Request, status, UploadFile, File
from fastapi.security import OAuth2PasswordRequestForm
from pydantic import BaseModel
from sqlalchemy import select
from sqlalchemy import func, select
from sqlalchemy.ext.asyncio import AsyncSession
from src.storage.db.manager import db_manager
@ -594,7 +594,7 @@ async def delete_user(
# 检查是否是最后一个超级管理员
result = await db.execute(
select(db.func.count(User.id)).filter(User.role == "superadmin", User.is_deleted == 0)
select(func.count(User.id)).filter(User.role == "superadmin", User.is_deleted == 0)
)
superadmin_count = result.scalar()
if superadmin_count <= 1:
@ -603,6 +603,22 @@ async def delete_user(
detail="不能删除最后一个超级管理员账户",
)
# 检查是否是部门的唯一管理员
if user.role == "admin":
result = await db.execute(
select(func.count(User.id)).filter(
User.department_id == user.department_id,
User.role == "admin",
User.is_deleted == 0
)
)
admin_count = result.scalar()
if admin_count <= 1:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="不能删除部门唯一的管理员",
)
# 不能删除自己的账户
if user.id == current_user.id:
raise HTTPException(