12 KiB
内部公文模块接口与权限设计
1. 目标
本文档定义 govdoc 模块接入当前 leaudit-platform 后端后的:
- 接口边界
- 路由设计
- 权限键设计
- 角色可见范围
- 数据隔离规则
- 前后端联动约定
该模块的正式中文名建议为:
内部公文处理
模块编码建议为:
govdoc
2. 设计原则
2.1 平台统一原则
govdoc 不作为独立系统存在,而是当前平台中的一个业务模块,因此必须统一复用:
- JWT 鉴权
- RBAC 权限模型
- 地区隔离
- 文档主档与文件版本体系
- OSS/MinIO
- Celery 异步任务
- Result 统一响应格式
2.2 接口职责边界
接口层只负责:
- 收参
- 鉴权
- 权限校验
- 数据范围校验
- 调 service
- 返回 DTO
接口层不负责:
- 文档解析
- 规则执行
- 本地落盘
- 同步长耗时审查
2.3 全异步执行原则
公文审查必须走异步任务,不能在 HTTP 请求内同步完成整条处理链。
即:
- 上传文档 ≠ 立即完成审查
- 发起审查 = 创建 run + 投递 worker
- 结果查询 = 前端轮询或详情页进入后查询
3. 模块路由建议
建议前端页面路由:
/govdoc/govdoc/upload/govdoc/list/govdoc/detail/:documentId/govdoc/rules/govdoc/settings(可选)
说明:
- 前端实际详情页建议使用
/govdoc/detail/:documentId sys_routes中可注册隐藏详情模板路由/govdoc/detail,供菜单/RBAC 使用
建议在 sys_routes 中注册为一组完整模块菜单。
4. 权限键设计
建议单独定义 govdoc 模块权限,不与 rag:*、cross_review:*、document:* 混用。
4.1 模块级权限键
govdoc:module:read
语义:
- 是否可见内部公文处理模块菜单
- 是否可进入
/govdoc相关页面
4.2 文档权限键
govdoc:document:creategovdoc:document:readgovdoc:document:updategovdoc:document:delete
语义:
- 上传公文
- 查看公文文档列表与详情
- 更新文档基础信息
- 删除公文文档
4.3 审查运行权限键
govdoc:run:creategovdoc:run:readgovdoc:run:retrygovdoc:run:cancel(若后续支持)
语义:
- 发起公文审查
- 查看 run 状态
- 失败后重试
- 取消执行中的任务
4.4 报告与结果权限键
govdoc:report:readgovdoc:result:read
语义:
- 下载 HTML 报告 / 批注 DOCX / 原文
- 查看 findings / entities / summary 等结果
4.5 规则权限键
govdoc:rule:readgovdoc:rule:manage
语义:
- 查看规则清单与规则详情
- 发布/更新/切换规则版本
4.6 配置权限键(可选)
govdoc:settings:readgovdoc:settings:update
语义:
- 查看模块配置
- 修改模块配置,例如默认规则版本、模型开关、执行策略等
5. 角色建议与默认授权
当前平台已收口角色:
provincial_adminadmincommonsuper_admin(可选,仅系统级)
建议 govdoc 默认授权如下。
5.1 super_admin
建议权限:
- 全部
govdoc:*:*
数据范围:
- 全量
5.2 provincial_admin
建议权限:
govdoc:module:readgovdoc:document:creategovdoc:document:readgovdoc:document:updategovdoc:document:deletegovdoc:run:creategovdoc:run:readgovdoc:run:retrygovdoc:report:readgovdoc:result:readgovdoc:rule:readgovdoc:rule:managegovdoc:settings:readgovdoc:settings:update
数据范围:
- 全省
5.3 admin
建议权限:
govdoc:module:readgovdoc:document:creategovdoc:document:readgovdoc:document:updategovdoc:document:deletegovdoc:run:creategovdoc:run:readgovdoc:run:retrygovdoc:report:readgovdoc:result:readgovdoc:rule:read
是否授予:
govdoc:rule:managegovdoc:settings:update
取决于业务是否允许地区管理员维护本地区规则版本。
数据范围:
- 本地区
5.4 common
建议权限:
govdoc:module:readgovdoc:document:creategovdoc:document:readgovdoc:run:creategovdoc:run:readgovdoc:report:readgovdoc:result:readgovdoc:rule:read
不建议授予:
govdoc:document:deletegovdoc:document:updategovdoc:run:retrygovdoc:rule:managegovdoc:settings:update
数据范围:
- 本人
6. 数据范围隔离规则
govdoc 模块的数据范围必须严格复用当前平台模型,不单独搞第二套。
建议规则:
6.1 全局角色
角色:
super_adminprovincial_admin
规则:
- 可看全量数据
- 若请求中带
region筛选,则按筛选值缩小范围
6.2 地区管理角色
角色:
admin
规则:
- 只能看
region = 当前用户 area - 即便前端传入其他地区,也必须后端拦截为 0 结果或直接拒绝
6.3 普通用户
角色:
common
规则:
- 只能看本人上传 / 本人创建 / 本人触发的文档与 run
- 不能通过
userId参数查看他人数据
6.4 结果与报告的权限继承
以下资源不单独放宽:
- findings
- entities
- HTML 报告
- annotated DOCX
- 原文下载
这些资源的查看权限必须继承文档主档可见范围。
即:
- 能否查看结果 = 能否查看该文档
7. 接口设计建议
建议全部放在 /api/v3/govdoc/ 命名空间下。
8. 文档接口
8.1 上传公文
POST /api/v3/govdoc/documents
功能:
- 上传一份公文文档
- 创建
leaudit_documents/leaudit_document_files主记录 engine_type标记为govdoc- 可选自动触发审查
请求建议:
file: 主文件typeId/typeCoderegion(最终以后端数据范围校正为准)autoRunspeedruleVersionId(可选)
所需权限:
govdoc:document:create
返回建议:
documentIdfileIdregionengineTypeautoRunTriggeredrun(若自动触发)
8.2 获取公文列表
GET /api/v3/govdoc/documents
功能:
- 获取公文模块的文档列表
查询参数建议:
pagepageSizekeywordregionstatusresultStatuscreatedBydateFromdateTo
后端必须附加固定过滤:
engine_type = 'govdoc'
所需权限:
govdoc:document:read
8.3 获取公文详情
GET /api/v3/govdoc/documents/{DocumentId}
功能:
- 获取文档基础信息
- 获取当前最新 run 摘要
- 获取报告资源引用
所需权限:
govdoc:document:read
8.4 更新文档信息
PATCH /api/v3/govdoc/documents/{DocumentId}
功能:
- 修改公文标题、文号、备注、类型等基础信息
所需权限:
govdoc:document:update
8.5 删除文档
DELETE /api/v3/govdoc/documents/{DocumentId}
功能:
- 软删除文档
- 默认只删模块侧展示,不立即物理删除 OSS 产物
所需权限:
govdoc:document:delete
9. 审查运行接口
9.1 发起审查
POST /api/v3/govdoc/runs
功能:
- 对已存在文档发起一次公文审查 run
- 创建
govdoc_runs - 投递 Celery worker
请求建议:
documentIdruleVersionId(可选)speedforce
所需权限:
govdoc:run:create
返回建议:
runIddocumentIdstatus=queuedphase=dispatch
9.2 获取 run 状态
GET /api/v3/govdoc/runs/{RunId}
功能:
- 查询当前 run 的状态、阶段、耗时、错误摘要
所需权限:
govdoc:run:read
9.3 重试 run
POST /api/v3/govdoc/runs/{RunId}/retry
功能:
- 对失败或已完成的 run 重新发起一次新 run
- 原 run 不覆盖
所需权限:
govdoc:run:retry
10. 结果与报告接口
10.1 获取审查结果摘要
GET /api/v3/govdoc/runs/{RunId}/result
功能:
- 返回 summary
- 返回 checked rules
- 返回 findings 统计
- 返回 entities 摘要
所需权限:
govdoc:result:read
10.2 获取 findings 明细
GET /api/v3/govdoc/runs/{RunId}/findings
功能:
- 返回段落级问题列表
所需权限:
govdoc:result:read
10.3 获取 entities 明细
GET /api/v3/govdoc/runs/{RunId}/entities
功能:
- 返回识别出的标题、文号、收文机关、署名、文种、附件等实体
所需权限:
govdoc:result:read
10.4 获取段落 HTML
GET /api/v3/govdoc/runs/{RunId}/paragraphs
功能:
- 返回前端文档联动视图所需的段落 HTML
所需权限:
govdoc:report:read
10.5 下载 HTML 报告
GET /api/v3/govdoc/runs/{RunId}/report/html
功能:
- 获取 HTML 报告内容或下载地址
所需权限:
govdoc:report:read
10.6 下载批注 DOCX
GET /api/v3/govdoc/runs/{RunId}/report/docx
功能:
- 下载带批注的 DOCX
所需权限:
govdoc:report:read
10.7 下载原文
GET /api/v3/govdoc/documents/{DocumentId}/original
功能:
- 下载原始上传文档
所需权限:
govdoc:report:read- 同时必须满足文档数据范围校验
11. 规则接口
11.1 获取规则清单
GET /api/v3/govdoc/rules
功能:
- 查看当前生效规则集摘要
- 查看总规则数、group、severity、category
所需权限:
govdoc:rule:read
11.2 获取规则详情
GET /api/v3/govdoc/rules/{RuleId}
功能:
- 查看单条规则详情,包括 stages、messages、target / applies_to 等
所需权限:
govdoc:rule:read
11.3 发布规则版本(后续)
POST /api/v3/govdoc/rule-versions/publish
功能:
- 发布新的规则版本
所需权限:
govdoc:rule:manage
12. 配置接口(可选)
12.1 获取模块配置
GET /api/v3/govdoc/settings
所需权限:
govdoc:settings:read
12.2 更新模块配置
PATCH /api/v3/govdoc/settings
所需权限:
govdoc:settings:update
配置项示例:
- 默认规则版本
- 是否允许自动审查
- 是否启用外部 LLM
- 最大文件大小
- 最大排队任务数
13. 前后端联动约定
13.1 前端菜单显示
前端展示 govdoc 模块菜单的条件建议为:
- 路由可见
- 且拥有
govdoc:module:read
13.2 页面按钮显示
建议按动作权限键控制:
- 上传按钮:
govdoc:document:create - 删除按钮:
govdoc:document:delete - 重新发起审查:
govdoc:run:create - 重试按钮:
govdoc:run:retry - 规则管理入口:
govdoc:rule:manage
13.3 数据不可仅靠前端隐藏
即使按钮被隐藏,后端仍必须做:
- 权限校验
- 数据范围校验
- 文档归属校验
前端永远不是安全边界。
14. 错误码与返回建议
建议继续复用当前平台 Result 风格,错误语义明确:
常见错误建议:
401:未登录 / token 无效403:无权限404:文档 / run / 规则不存在409:已有运行中任务,不允许重复发起422:文件类型不支持 / 参数非法500:执行失败
建议返回可读 message,例如:
您没有查看内部公文处理模块的权限您没有查看该公文的权限当前文档已有执行中的审查任务当前规则版本不可用,请联系管理员
15. SQL 与初始化建议
建议至少补以下脚本:
scripts/创建sql/schema_add_govdoc_module.sqlscripts/创建sql/seed_govdoc_permissions.sqlscripts/创建sql/seed_govdoc_entry_module.sqlscripts/创建sql/seed_govdoc_routes.sql
建议初始化内容:
permissions中加入govdoc:*sys_routes中加入/govdoc*role_permissions中给provincial_admin/admin/common分配默认权限role_route中分配菜单可见性
16. 最终建议
govdoc 模块的接口和权限设计,应严格遵守当前平台边界:
- 接口统一走
/api/v3/govdoc/* - 权限统一走
govdoc:*:* - 数据范围统一走当前地区隔离逻辑
- 结果下载权限继承文档可见范围
- 公文模块不单独再造第二套用户、权限、地区模型
这样才能保证:
- 模块边界清晰
- 前后端联动简单
- 后续统计和审计一致
- 长期维护成本最低