feat: add rbac-backed settings modules
This commit is contained in:
+20
-1
@@ -2,15 +2,18 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import mimetypes
|
||||
import sys
|
||||
from contextlib import asynccontextmanager
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.responses import Response
|
||||
|
||||
from fastapi_admin.config import APP_NAME, APP_CORS_ORIGINS
|
||||
from fastapi_admin.config._loader import _find_project_root
|
||||
from fastapi_common.fastapi_common_storage.oss_client import OssClient
|
||||
|
||||
# 确保项目根在 sys.path
|
||||
_PROJECT_ROOT = _find_project_root()
|
||||
@@ -62,6 +65,22 @@ def create_app() -> FastAPI:
|
||||
from fastapi_admin.bootstrap_parts.controllers import register_controllers
|
||||
register_controllers(app)
|
||||
|
||||
@app.get("/docauditai/{ObjectPath:path}")
|
||||
async def GetCompatObject(ObjectPath: str):
|
||||
"""兼容旧前端的对象访问路径,优先读取新桶对象。"""
|
||||
Client = OssClient()
|
||||
CandidateBuckets = [Client.bucket, "docauditai"]
|
||||
for BucketName in CandidateBuckets:
|
||||
try:
|
||||
if not Client.ObjectExists(ObjectPath, Bucket=BucketName):
|
||||
continue
|
||||
Content = Client.DownloadBytes(ObjectPath, Bucket=BucketName)
|
||||
MediaType = mimetypes.guess_type(ObjectPath)[0] or "application/octet-stream"
|
||||
return Response(content=Content, media_type=MediaType)
|
||||
except Exception:
|
||||
continue
|
||||
raise HTTPException(status_code=404, detail="Object not found")
|
||||
|
||||
return app
|
||||
|
||||
|
||||
|
||||
@@ -61,9 +61,19 @@ def _register_from_package(
|
||||
|
||||
pkg_dir = str(Path(pkg.__file__ or "").parent)
|
||||
|
||||
for _, module_name, _ in pkgutil.iter_modules([pkg_dir]):
|
||||
for _, module_name, is_pkg in pkgutil.iter_modules([pkg_dir]):
|
||||
if module_name.startswith("_"):
|
||||
continue
|
||||
|
||||
if is_pkg:
|
||||
try:
|
||||
sub_pkg_name = f"{pkg_name}.{module_name}"
|
||||
sub_pkg = importlib.import_module(sub_pkg_name)
|
||||
_register_from_package(sub_pkg, sub_pkg_name, package_routers, app)
|
||||
except ImportError:
|
||||
continue
|
||||
continue
|
||||
|
||||
try:
|
||||
mod = importlib.import_module(f"{pkg_name}.{module_name}")
|
||||
except ImportError:
|
||||
|
||||
Reference in New Issue
Block a user