diff --git a/app/api/endpoints/user.py b/app/api/endpoints/user.py index 317bc3ca..60a2e045 100644 --- a/app/api/endpoints/user.py +++ b/app/api/endpoints/user.py @@ -17,7 +17,7 @@ router = APIRouter() @router.get("/", summary="所有用户", response_model=List[schemas.User]) -def read_users( +def list_users( db: Session = Depends(get_db), current_user: User = Depends(get_current_active_superuser), ) -> Any: diff --git a/app/db/__init__.py b/app/db/__init__.py index 3da3bd9b..e90642fa 100644 --- a/app/db/__init__.py +++ b/app/db/__init__.py @@ -2,7 +2,7 @@ import json from typing import Any, Self, List from typing import Tuple, Optional, Generator -from sqlalchemy import create_engine, QueuePool +from sqlalchemy import create_engine, QueuePool, and_ from sqlalchemy import inspect from sqlalchemy.orm import declared_attr from sqlalchemy.orm import sessionmaker, Session, scoped_session, as_declarative @@ -167,7 +167,7 @@ class Base: @classmethod @db_update def delete(cls, db: Session, rid): - db.query(cls).filter(cls.id == rid).delete() + db.query(cls).filter(and_(cls.id == rid)).delete() @classmethod @db_update diff --git a/app/schemas/user.py b/app/schemas/user.py index 9b1a01eb..b5d5f577 100644 --- a/app/schemas/user.py +++ b/app/schemas/user.py @@ -1,6 +1,7 @@ +import json from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, validator # Shared properties @@ -17,6 +18,22 @@ class UserBase(BaseModel): avatar: Optional[str] = None # 是否开启二次验证 is_otp: Optional[bool] = False + # 权限 + permissions: Optional[dict] = {} + # 个性化设置 + settings: Optional[dict] = {} + + @validator('permissions', 'settings', pre=True) + def parse_json_fields(cls, value): + if value: + try: + return json.loads(value) + except json.JSONDecodeError: + raise ValueError(f"Invalid JSON string: {value}") + return {} + + class Config: + orm_mode = True # Properties to receive via API on creation