This commit is contained in:
2026-07-13 17:44:50 +08:00
parent 975fa1ffac
commit 8493f0df03
25 changed files with 1050 additions and 734 deletions
+20 -48
View File
@@ -28,6 +28,7 @@ class UserResponse(BaseModel):
email: str
full_name: Optional[str]
is_active: bool
is_superuser: bool = False
roles: List[str]
class Config:
@@ -102,6 +103,19 @@ def check_admin(user: User) -> bool:
return True
def _build_user_response(user: User) -> UserResponse:
"""统一构造用户响应,确保 is_superuser 等字段一致"""
return UserResponse(
id=user.id,
username=user.username,
email=user.email,
full_name=user.full_name,
is_active=user.is_active,
is_superuser=user.is_superuser,
roles=[r.code for r in user.roles],
)
@router.post("/login", response_model=Token)
async def login(
form_data: OAuth2PasswordRequestForm = Depends(),
@@ -123,14 +137,7 @@ async def login(
return Token(
access_token=access_token,
token_type="bearer",
user=UserResponse(
id=user.id,
username=user.username,
email=user.email,
full_name=user.full_name,
is_active=user.is_active,
roles=[r.code for r in user.roles]
)
user=_build_user_response(user)
)
@@ -154,14 +161,7 @@ async def login_json(
return Token(
access_token=access_token,
token_type="bearer",
user=UserResponse(
id=user.id,
username=user.username,
email=user.email,
full_name=user.full_name,
is_active=user.is_active,
roles=[r.code for r in user.roles]
)
user=_build_user_response(user)
)
@@ -169,14 +169,7 @@ async def login_json(
async def get_current_user_info(
current_user: User = Depends(get_current_active_user)
):
return UserResponse(
id=current_user.id,
username=current_user.username,
email=current_user.email,
full_name=current_user.full_name,
is_active=current_user.is_active,
roles=[r.code for r in current_user.roles]
)
return _build_user_response(current_user)
@router.post("/logout")
@@ -195,14 +188,7 @@ async def list_users(
)
users = result.scalars().all()
return [
UserResponse(
id=u.id,
username=u.username,
email=u.email,
full_name=u.full_name,
is_active=u.is_active,
roles=[r.code for r in u.roles]
) for u in users
_build_user_response(u) for u in users
]
@@ -245,14 +231,7 @@ async def create_user(
logger.info(f"管理员 {current_user.username} 创建了用户 {user.username}")
return UserResponse(
id=user.id,
username=user.username,
email=user.email,
full_name=user.full_name,
is_active=user.is_active,
roles=[r.code for r in user.roles]
)
return _build_user_response(user)
@router.put("/users/{user_id}", response_model=UserResponse)
@@ -292,14 +271,7 @@ async def update_user(
logger.info(f"管理员 {current_user.username} 更新了用户 {user.username}")
return UserResponse(
id=user.id,
username=user.username,
email=user.email,
full_name=user.full_name,
is_active=user.is_active,
roles=[r.code for r in user.roles]
)
return _build_user_response(user)
@router.delete("/users/{user_id}")