fix(middlewares): 添加JSON字段规范化处理确保数据合法性
refactor(api): 统一路由依赖认证,调整部分路由权限配置 在middlewares.py中添加normalize_json_field方法处理JSON字段,确保写入数据库的数据合法 在__init__.py中统一路由认证依赖,部分路由从仅需权限改为同时需要认证和权限
This commit is contained in:
parent
982da3f076
commit
258404fa45
@ -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 .apis import apis_router
|
||||||
from .app_users import app_users_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(base_router, prefix="/base")
|
||||||
v1_router.include_router(app_users_router, prefix="/app-user") # AppUser路由,无需权限依赖
|
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(app_valuations_router, prefix="/app-valuations") # 用户端估值评估路由,需要认证
|
||||||
v1_router.include_router(users_router, prefix="/user", dependencies=[DependPermission])
|
v1_router.include_router(users_router, prefix="/user", dependencies=[DependAuth, DependPermission])
|
||||||
v1_router.include_router(roles_router, prefix="/role", dependencies=[DependPermission])
|
v1_router.include_router(roles_router, prefix="/role", dependencies=[DependAuth, DependPermission])
|
||||||
v1_router.include_router(menus_router, prefix="/menu", dependencies=[DependPermission])
|
v1_router.include_router(menus_router, prefix="/menu", dependencies=[DependAuth, DependPermission])
|
||||||
v1_router.include_router(apis_router, prefix="/api", dependencies=[DependPermission])
|
v1_router.include_router(apis_router, prefix="/api", dependencies=[DependAuth, DependPermission])
|
||||||
v1_router.include_router(depts_router, prefix="/dept", dependencies=[DependPermission])
|
v1_router.include_router(depts_router, prefix="/dept", dependencies=[DependAuth, DependPermission])
|
||||||
v1_router.include_router(auditlog_router, prefix="/auditlog", dependencies=[DependPermission])
|
v1_router.include_router(auditlog_router, prefix="/auditlog", dependencies=[DependAuth, DependPermission])
|
||||||
v1_router.include_router(esg_router, prefix="/esg", dependencies=[DependPermission])
|
v1_router.include_router(esg_router, prefix="/esg")
|
||||||
v1_router.include_router(index_router, prefix="/index", dependencies=[DependPermission])
|
v1_router.include_router(index_router, prefix="/index")
|
||||||
v1_router.include_router(industry_router, prefix="/industry", dependencies=[DependPermission])
|
v1_router.include_router(industry_router, prefix="/industry")
|
||||||
v1_router.include_router(policy_router, prefix="/policy", dependencies=[DependPermission])
|
v1_router.include_router(policy_router, prefix="/policy")
|
||||||
v1_router.include_router(third_party_api_router, prefix="/third_party_api", dependencies=[DependPermission])
|
v1_router.include_router(
|
||||||
v1_router.include_router(valuations_router, prefix="/valuations", dependencies=[DependPermission])
|
third_party_api_router,
|
||||||
|
prefix="/third_party_api",
|
||||||
|
dependencies=[DependAuth, DependPermission],
|
||||||
|
)
|
||||||
|
v1_router.include_router(valuations_router, prefix="/valuations", dependencies=[DependAuth, DependPermission])
|
||||||
|
|||||||
@ -122,6 +122,35 @@ class HttpAuditLogMiddleware(BaseHTTPMiddleware):
|
|||||||
pass
|
pass
|
||||||
return v
|
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]:
|
async def _async_iter(self, items: list[bytes]) -> AsyncGenerator[bytes, None]:
|
||||||
for item in items:
|
for item in items:
|
||||||
yield item
|
yield item
|
||||||
@ -166,8 +195,11 @@ class HttpAuditLogMiddleware(BaseHTTPMiddleware):
|
|||||||
data: dict = await self.get_request_log(request=request, response=response)
|
data: dict = await self.get_request_log(request=request, response=response)
|
||||||
data["response_time"] = process_time
|
data["response_time"] = process_time
|
||||||
|
|
||||||
data["request_args"] = request.state.request_args
|
request_args = getattr(request.state, "request_args", None)
|
||||||
data["response_body"] = await self.get_response_body(request, response)
|
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)
|
await AuditLog.create(**data)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|||||||
4
估值字段.txt
4
估值字段.txt
@ -37,5 +37,5 @@
|
|||||||
|
|
||||||
|
|
||||||
export DOCKER_DEFAULT_PLATFORM=linux/amd64
|
export DOCKER_DEFAULT_PLATFORM=linux/amd64
|
||||||
docker build -t zfc931912343/guzhi-fastapi-admin:v1.0 .
|
docker build -t zfc931912343/guzhi-fastapi-admin:v1.1 .
|
||||||
docker push zfc931912343/guzhi-fastapi-admin:v1.0
|
docker push zfc931912343/guzhi-fastapi-admin:v1.1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user