diff --git a/app/api/v1/__init__.py b/app/api/v1/__init__.py index 7a80d31..5443bb0 100644 --- a/app/api/v1/__init__.py +++ b/app/api/v1/__init__.py @@ -1,6 +1,7 @@ -from fastapi import APIRouter +from fastapi import APIRouter, Depends -from app.core.dependency import DependPermission +from app.core.dependency import DependAuth, DependPermission +from app.utils.app_user_jwt import get_current_app_user from .apis import apis_router from .app_users import app_users_router @@ -23,15 +24,19 @@ v1_router = APIRouter() v1_router.include_router(base_router, prefix="/base") v1_router.include_router(app_users_router, prefix="/app-user") # AppUser路由,无需权限依赖 v1_router.include_router(app_valuations_router, prefix="/app-valuations") # 用户端估值评估路由,需要认证 -v1_router.include_router(users_router, prefix="/user", dependencies=[DependPermission]) -v1_router.include_router(roles_router, prefix="/role", dependencies=[DependPermission]) -v1_router.include_router(menus_router, prefix="/menu", dependencies=[DependPermission]) -v1_router.include_router(apis_router, prefix="/api", dependencies=[DependPermission]) -v1_router.include_router(depts_router, prefix="/dept", dependencies=[DependPermission]) -v1_router.include_router(auditlog_router, prefix="/auditlog", dependencies=[DependPermission]) -v1_router.include_router(esg_router, prefix="/esg", dependencies=[DependPermission]) -v1_router.include_router(index_router, prefix="/index", dependencies=[DependPermission]) -v1_router.include_router(industry_router, prefix="/industry", dependencies=[DependPermission]) -v1_router.include_router(policy_router, prefix="/policy", dependencies=[DependPermission]) -v1_router.include_router(third_party_api_router, prefix="/third_party_api", dependencies=[DependPermission]) -v1_router.include_router(valuations_router, prefix="/valuations", dependencies=[DependPermission]) +v1_router.include_router(users_router, prefix="/user", dependencies=[DependAuth, DependPermission]) +v1_router.include_router(roles_router, prefix="/role", dependencies=[DependAuth, DependPermission]) +v1_router.include_router(menus_router, prefix="/menu", dependencies=[DependAuth, DependPermission]) +v1_router.include_router(apis_router, prefix="/api", dependencies=[DependAuth, DependPermission]) +v1_router.include_router(depts_router, prefix="/dept", dependencies=[DependAuth, DependPermission]) +v1_router.include_router(auditlog_router, prefix="/auditlog", dependencies=[DependAuth, DependPermission]) +v1_router.include_router(esg_router, prefix="/esg") +v1_router.include_router(index_router, prefix="/index") +v1_router.include_router(industry_router, prefix="/industry") +v1_router.include_router(policy_router, prefix="/policy") +v1_router.include_router( + third_party_api_router, + prefix="/third_party_api", + dependencies=[DependAuth, DependPermission], +) +v1_router.include_router(valuations_router, prefix="/valuations", dependencies=[DependAuth, DependPermission]) diff --git a/app/core/middlewares.py b/app/core/middlewares.py index 08d8a8e..a999658 100644 --- a/app/core/middlewares.py +++ b/app/core/middlewares.py @@ -122,6 +122,35 @@ class HttpAuditLogMiddleware(BaseHTTPMiddleware): pass return v + def normalize_json_field(self, value: Any) -> Any: + """确保写入 JSONField 的值合法。""" + if value is None: + return None + + if isinstance(value, (bytes, bytearray)): + try: + value = value.decode("utf-8") + except Exception: + value = value.decode("utf-8", errors="ignore") + + if isinstance(value, str): + stripped = value.strip() + if not stripped: + return None + try: + return json.loads(stripped) + except (ValueError, TypeError): + return stripped + + if isinstance(value, (dict, list, int, float, bool)): + return value + + try: + json.dumps(value) + return value + except (TypeError, ValueError): + return str(value) + async def _async_iter(self, items: list[bytes]) -> AsyncGenerator[bytes, None]: for item in items: yield item @@ -166,8 +195,11 @@ class HttpAuditLogMiddleware(BaseHTTPMiddleware): data: dict = await self.get_request_log(request=request, response=response) data["response_time"] = process_time - data["request_args"] = request.state.request_args - data["response_body"] = await self.get_response_body(request, response) + request_args = getattr(request.state, "request_args", None) + response_body = await self.get_response_body(request, response) + + data["request_args"] = self.normalize_json_field(request_args) + data["response_body"] = self.normalize_json_field(response_body) await AuditLog.create(**data) return response diff --git a/估值字段.txt b/估值字段.txt index 5ee8f9f..e23ebd8 100644 --- a/估值字段.txt +++ b/估值字段.txt @@ -37,5 +37,5 @@ export DOCKER_DEFAULT_PLATFORM=linux/amd64 -docker build -t zfc931912343/guzhi-fastapi-admin:v1.0 . -docker push zfc931912343/guzhi-fastapi-admin:v1.0 +docker build -t zfc931912343/guzhi-fastapi-admin:v1.1 . +docker push zfc931912343/guzhi-fastapi-admin:v1.1