init
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user