feat: add tenant-scoped rule and permission management

This commit is contained in:
wren
2026-05-21 22:03:08 +08:00
parent a2c2bf1969
commit 1f1bccf3b3
193 changed files with 64463 additions and 1771 deletions
@@ -30,7 +30,8 @@ class GovdocController(BaseController):
async def UploadDocument(
file: UploadFile = File(...),
typeId: int | None = Form(default=None),
region: str = Form(default="default"),
region: str | None = Form(default=None, description="兼容保留字段:租户展示值/旧地区"),
tenant_code: str | None = Form(default=None, description="租户编码"),
autoRun: bool = Form(default=True),
speed: str = Form(default="normal"),
ruleVersionId: int | None = Form(default=None),
@@ -44,6 +45,7 @@ class GovdocController(BaseController):
file=file,
typeId=typeId,
region=region,
tenantCode=tenant_code,
autoRun=autoRun,
speed=speed,
ruleVersionId=ruleVersionId,
@@ -57,7 +59,8 @@ class GovdocController(BaseController):
pageSize: int = Query(default=20, ge=1, le=100),
keyword: str | None = Query(default=None),
fileExt: str | None = Query(default=None),
region: str | None = Query(default=None),
region: str | None = Query(default=None, description="兼容保留字段:租户展示值/旧地区"),
tenant_code: str | None = Query(default=None, description="租户编码"),
status: str | None = Query(default=None),
resultStatus: str | None = Query(default=None),
createdBy: int | None = Query(default=None),
@@ -75,6 +78,7 @@ class GovdocController(BaseController):
keyword=keyword,
fileExt=fileExt,
region=region,
tenantCode=tenant_code,
status=status,
resultStatus=resultStatus,
createdBy=createdBy,
@@ -151,7 +155,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""查询 run 状态、阶段、耗时、错误摘要。"""
result = await self.GovdocService.GetRunStatus(runId=runId)
result = await self.GovdocService.GetRunStatus(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
# ── 结果与报告 ────────────────────────────────────
@@ -162,7 +166,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取审查结果摘要:summary + checked rules + findings 统计 + entities 摘要。"""
result = await self.GovdocService.GetRunResult(runId=runId)
result = await self.GovdocService.GetRunResult(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/findings")
@@ -171,7 +175,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取段落级 findings 明细列表。"""
result = await self.GovdocService.GetRunFindings(runId=runId)
result = await self.GovdocService.GetRunFindings(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/entities")
@@ -180,7 +184,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取识别出的标题、文号、署名等实体。"""
result = await self.GovdocService.GetRunEntities(runId=runId)
result = await self.GovdocService.GetRunEntities(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/structure")
@@ -189,7 +193,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取文档结构统计(结构面板数据)。"""
result = await self.GovdocService.GetRunStructure(runId=runId)
result = await self.GovdocService.GetRunStructure(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/outline")
@@ -198,7 +202,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取文档大纲树(大纲面板数据)。"""
result = await self.GovdocService.GetRunOutline(runId=runId)
result = await self.GovdocService.GetRunOutline(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/paragraphs")
@@ -207,7 +211,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取前端文档联动视图所需的段落 HTML。"""
result = await self.GovdocService.GetRunParagraphs(runId=runId)
result = await self.GovdocService.GetRunParagraphs(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/report/html")
@@ -216,7 +220,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取 HTML 报告内容或下载地址。"""
result = await self.GovdocService.GetReportHtml(runId=runId)
result = await self.GovdocService.GetReportHtml(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/runs/{runId}/report/docx")
@@ -225,7 +229,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取批注 DOCX 下载地址。"""
result = await self.GovdocService.GetReportDocx(runId=runId)
result = await self.GovdocService.GetReportDocx(runId=runId, userId=int(payload["user_id"]))
return Result.success(data=result)
@self.router.get("/documents/{documentId}/original")
@@ -234,7 +238,7 @@ class GovdocController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取原始上传文档下载地址。"""
result = await self.GovdocService.DownloadOriginal(documentId=documentId)
result = await self.GovdocService.DownloadOriginal(documentId=documentId, userId=int(payload["user_id"]))
return Result.success(data=result)
# ── 规则 ──────────────────────────────────────────