fix(auth): 添加检查以防止删除部门唯一管理员账户
This commit is contained in:
parent
67bcd26565
commit
2836ff09cf
@ -4,7 +4,7 @@ import uuid
|
|||||||
from fastapi import APIRouter, Depends, HTTPException, Request, status, UploadFile, File
|
from fastapi import APIRouter, Depends, HTTPException, Request, status, UploadFile, File
|
||||||
from fastapi.security import OAuth2PasswordRequestForm
|
from fastapi.security import OAuth2PasswordRequestForm
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from sqlalchemy import select
|
from sqlalchemy import func, select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from src.storage.db.manager import db_manager
|
from src.storage.db.manager import db_manager
|
||||||
@ -594,7 +594,7 @@ async def delete_user(
|
|||||||
|
|
||||||
# 检查是否是最后一个超级管理员
|
# 检查是否是最后一个超级管理员
|
||||||
result = await db.execute(
|
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()
|
superadmin_count = result.scalar()
|
||||||
if superadmin_count <= 1:
|
if superadmin_count <= 1:
|
||||||
@ -603,6 +603,22 @@ async def delete_user(
|
|||||||
detail="不能删除最后一个超级管理员账户",
|
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:
|
if user.id == current_user.id:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user