后台管理技术实现方案
1. 目标
本方案用于把 02-后台管理功能框架与底座需求 中的功能框架和各菜单需求落到技术实现层,明确后台管理系统如何支撑:
- 多 App 现金贷统一后台,不按 App 复制菜单。
- 手机分期独立业务线接入统一门户、统一权限、统一审计和统一导出。
- 共享客户、共享资金、运行保障、权限审计等中心按统一规则协作。
- 后台查询屏蔽底层多库差异,用户不需要知道数据在哪个库。
- 所有关键访问、明文查看、导出、配置变更和高风险操作可授权、可审计、可追溯。
P0 阶段优先实现查询、权限、数据范围、脱敏、导出、审计和告警基础能力;资金类写操作、完整审批流、自动对账、复杂报表后置。
2. 总体技术架构
后台管理建议采用“前端统一门户 + 后台网关 + 身份认证与管理底座服务 + 查询聚合服务 + 业务适配器”的架构。
后台前端
├─ 统一门户
├─ 现金贷管理平台
├─ 手机分期管理平台
├─ 共享客户中心
├─ 共享资金中心
├─ 运行保障中心
└─ 权限与审计中心
后台网关
├─ 登录态校验
├─ 路由转发
├─ 统一鉴权拦截
├─ 请求追踪 ID
└─ 限流与基础安全
管理底座服务
├─ 用户与角色服务
├─ 身份源与登录服务
├─ 权限与数据范围服务
├─ App 注册服务
├─ 数据源路由服务
├─ 敏感数据服务
├─ 导出服务
├─ 审计服务
└─ 告警服务
查询聚合服务
├─ 客户聚合
├─ 进件聚合
├─ 借款聚合
├─ 放款聚合
├─ 还款聚合
├─ 分期订单聚合
└─ 资金流水聚合
业务适配器
├─ 现金贷 App A 适配器
├─ 现金贷 App B 适配器
├─ 手机分期适配器
├─ 支付通道适配器
├─ 短信服务适配器
└─ 共享服务适配器2.1 技术架构图
flowchart TB subgraph client[后台前端] portal[统一门户] cash[现金贷管理平台] phone[手机分期管理平台] customer[共享客户中心] payment[共享资金中心] ops[运行保障中心] admin[权限与审计中心] end subgraph gateway[后台网关] session[登录态校验] authFilter[统一鉴权拦截] trace["Trace ID"] rateLimit[限流与安全控制] end subgraph foundation[管理底座服务] userRole[用户与角色服务] identity[身份源与登录服务] permission[权限与数据范围服务] appRegistry[App 注册服务] route[数据源路由服务] sensitive[敏感数据服务] exportSvc[导出服务] audit[审计服务] alert[告警服务] end subgraph aggregate[查询聚合服务] customerAgg[客户聚合] applicationAgg[进件聚合] loanAgg[借款聚合] disbursementAgg[放款聚合] repaymentAgg[还款聚合] phoneOrderAgg[分期订单聚合] fundAgg[资金流水聚合] end subgraph adapter[业务适配器] cashAdapterA[现金贷 App A 适配器] cashAdapterB[现金贷 App B 适配器] phoneAdapter[手机分期适配器] paymentAdapter[支付通道适配器] smsAdapter[短信服务适配器] sharedAdapter[共享服务适配器] end subgraph data[数据源与外部服务] cashDbA[现金贷 App A 业务库] cashDbB[现金贷 App B 业务库] phoneDb[手机分期业务库] paymentChannel["支付 / 代扣通道"] smsProvider[短信服务] sharedService["共享客户 / 认证 / 风控服务"] fileStore[导出文件存储] auditDb[审计日志库] alertDb[告警库] feishuIdp[飞书身份源] larkIdp["Lark 身份源"] end client --> gateway gateway --> foundation gateway --> aggregate session --> userRole session --> identity authFilter --> permission trace --> audit aggregate --> permission aggregate --> route aggregate --> sensitive aggregate --> audit aggregate --> adapter appRegistry --> route route --> cashAdapterA route --> cashAdapterB route --> phoneAdapter exportSvc --> permission exportSvc --> aggregate exportSvc --> sensitive exportSvc --> fileStore exportSvc --> audit alert --> alertDb audit --> auditDb identity --> feishuIdp identity --> larkIdp cashAdapterA --> cashDbA cashAdapterB --> cashDbB phoneAdapter --> phoneDb paymentAdapter --> paymentChannel smsAdapter --> smsProvider sharedAdapter --> sharedService adapter --> alert
2.2 架构原则
- 前端只做展示和交互,不作为权限可信边界。
- 后台内部用户是权限主体,账号密码、飞书、Lark 等只是登录身份源。
- 身份源需要按平台和租户隔离,不能用手机号或邮箱自动合并不同办公软件用户。
- 网关和后端服务都必须校验权限,不能只依赖菜单隐藏。
- 业务页面统一调用查询聚合服务,不直接连接具体 App 业务库。
- 查询聚合服务通过数据源路由服务定位数据源。
- 所有查询结果都必须带业务线、App、数据源、客户 ID、订单号等来源信息。
- 敏感字段默认脱敏,明文查看必须走独立接口和审计。
- 导出统一走导出服务,不允许业务接口直接返回大文件。
- 审计采用统一模型,各中心只上报标准审计事件。
3. 服务划分
3.1 后台网关
职责:
- 校验登录态和基础请求合法性。
- 生成或透传
trace_id,贯穿接口、审计、导出和告警。 - 解析当前用户上下文,包括用户 ID、角色、部门、团队、登录 IP。
- 按接口元数据触发基础鉴权。
- 统一处理限流、请求体大小、文件下载权限和安全响应头。
P0 要求:
- 支持后台用户登录态校验。
- 所有后台接口必须带
trace_id。 - 无权限、未登录、账号停用、账号锁定返回统一错误码。
3.2 用户与角色服务
职责:
- 管理后台用户生命周期。
- 管理后台内部用户与账号密码、飞书、Lark 等身份源的绑定关系。
- 管理角色、菜单、资源、动作和字段权限。
- 管理用户与角色绑定、用户单独授权、显式禁用权限。
- 管理账号状态和会话失效。
核心能力:
| 能力 | 说明 |
|---|---|
| 用户管理 | 新增、编辑、启用、停用、锁定、解锁 |
| 身份绑定 | 绑定、解绑、查询账号密码、飞书、Lark 等登录身份 |
| 角色管理 | 角色定义、角色绑定、角色权限配置 |
| 会话管理 | 登录、退出、会话刷新、强制失效 |
| 权限缓存 | 缓存用户有效权限,权限变更后刷新或失效 |
3.2.1 身份源与登录服务
职责:
- 管理账号密码、飞书、Lark 等登录身份源配置。
- 处理三方办公软件授权回调后到后台内部用户的映射。
- 维护后台用户与外部身份的绑定、解绑和主登录方式。
- 生成统一登录会话,并把身份源信息写入登录审计。
身份模型:
后台内部用户 admin_user
├─ 本地账号密码身份
├─ 飞书身份 source=feishu, tenant_id=tenant_a, external_user_id=user_x
└─ Lark 身份 source=lark, tenant_id=tenant_b, external_user_id=user_y核心规则:
- 权限、角色、数据范围只挂在后台内部用户上,不直接挂在飞书或 Lark 用户上。
- 一个后台内部用户可以绑定多个身份源。
- 一个外部身份只能绑定一个后台内部用户。
- 唯一性应按
identity_source + tenant_id + external_user_id控制。 - 飞书和 Lark 是不同身份源,即使邮箱或手机号相同,也不能自动合并。
- 未绑定后台用户的三方身份首次登录时,不自动授予业务权限。
- 后台用户停用、锁定、离职后,所有绑定身份源都不能继续登录后台。
P0 处理:
- 数据模型、审计字段和接口预留三方身份源。
- 账号密码登录可先落地。
- 飞书、Lark 授权登录、通讯录同步和自动绑定流程可后续实现。
3.3 权限与数据范围服务
职责:
- 输出当前用户对系统、菜单、资源、动作、字段和数据范围的有效权限。
- 对查询、详情、导出、明文查看、高风险操作进行统一鉴权。
- 提供数据范围过滤条件,供查询聚合服务下推。
权限计算模型:
有效权限 = 角色权限 + 用户单独授权 - 显式禁用权限
有效数据范围 = 角色允许范围 ∩ 用户授权范围 ∩ 当前请求范围鉴权维度:
| 维度 | 示例 |
|---|---|
| 系统 | cashloan、phone、shared.customer、shared.payment、ops、admin |
| 资源 | customer、loan、repayment、phone.order、audit |
| 动作 | read、search、export、update、handle、view_sensitive |
| 数据范围 | App、国家、产品、门店、区域、商户、团队 |
| 字段范围 | 手机号、BVN / NIN、银行卡、照片、联系人 |
3.4 App 注册服务
职责:
- 管理现金贷 App 元数据。
- 管理 App 与数据源、国家、产品、品牌的关系。
- 管理 App 状态和变更日志。
P0 要求:
- 新增 App 后,只需配置 App、数据源和权限,即可进入统一查询链路。
- App 停用不影响历史数据查询,但默认不进入新增业务查询范围。
- 数据源关系变更写入审计,并触发路由缓存刷新。
3.5 数据源路由服务
职责:
- 根据 App、客户、订单、业务线定位具体数据源。
- 屏蔽多 App、多库、不同业务线的数据源差异。
- 返回可解释的路由结果和失败原因。
路由输入:
| 输入类型 | 示例 |
|---|---|
| App 维度 | app_id、brand_code、country_code |
| 客户维度 | customer_id、global_customer_id、手机号、BVN / NIN |
| 订单维度 | order_id、global_order_id、借据号 |
| 业务线维度 | cashloan、phone、shared.payment |
路由输出:
| 字段 | 说明 |
|---|---|
business_line | 业务线 |
app_id | App ID,手机分期可为空或使用业务线固定值 |
data_source_code | 数据源编码 |
adapter_code | 业务适配器编码 |
route_status | 成功、无权限、无数据源、数据源停用 |
route_reason | 失败原因或说明 |
3.6 查询聚合服务
职责:
- 对前端提供统一查询接口。
- 校验权限与数据范围。
- 调用数据源路由服务定位数据源。
- 并发调用一个或多个业务适配器。
- 合并、分页、排序、脱敏、标记部分失败。
聚合策略:
| 场景 | 策略 |
|---|---|
| 精确订单查询 | 优先通过订单号定位单一 App / 数据源 |
| 按 App 列表查询 | 按授权 App 范围路由到对应数据源 |
| 跨 App 客户查询 | 在授权 App 范围内并发查询,允许部分失败 |
| 手机分期查询 | 按 phone 业务线进入分期适配器 |
| 资金流水查询 | 按业务线、App、通道流水号组合路由 |
统一响应要求:
{
"trace_id": "string",
"success": true,
"partial_success": false,
"data": [],
"page": {
"page_no": 1,
"page_size": 20,
"total": 0
},
"sources": [
{
"business_line": "cashloan",
"app_id": "app_a",
"data_source_code": "cashloan_app_a",
"status": "success",
"message": ""
}
],
"errors": []
}3.7 业务适配器
职责:
- 把统一查询请求转换为具体业务库或业务服务的查询。
- 把业务侧返回转换为后台统一对象模型。
- 不承载后台权限逻辑,只信任聚合服务传入的已授权数据范围。
适配器类型:
| 适配器 | 说明 |
|---|---|
| 现金贷 App 适配器 | 对接每个现金贷 App 的业务库或业务服务 |
| 手机分期适配器 | 对接分期订单、门店、商户、商品、首付、还款等数据 |
| 支付通道适配器 | 对接放款、还款、代扣、通道流水 |
| 短信适配器 | 对接短信发送记录和成功率 |
| 共享服务适配器 | 对接客户、认证、设备、风控摘要等共享数据 |
3.8 敏感数据服务
职责:
- 定义敏感字段目录。
- 对查询结果进行字段级脱敏。
- 对明文查看进行独立鉴权、原因记录和审计。
脱敏策略:
| 字段 | 默认展示 |
|---|---|
| 手机号 | 中间位脱敏 |
| BVN / NIN | 仅展示后 4 位 |
| 银行卡号 | 仅展示后 4 位 |
| 证件号 | 中间段脱敏 |
| 地址 | 分段脱敏 |
| 联系人手机号 | 中间位脱敏 |
| 客户照片 | 默认不展示原图 |
3.9 导出服务
职责:
- 接收导出申请。
- 校验导出权限、字段范围、数据范围和导出原因。
- 创建异步导出任务。
- 调用查询聚合服务分批拉取数据。
- 生成文件、水印、文件摘要。
- 写入导出日志并提供下载。
导出任务状态:
pending -> running -> success
pending -> running -> failed
pending -> cancelledP0 控制:
- 导出权限独立配置。
- 跨 App 导出需要更高权限。
- 导出文件默认带水印。
- 导出日志记录筛选条件、字段、范围、行数和文件摘要。
3.10 审计服务
职责:
- 统一接收后台各服务审计事件。
- 存储登录、查询、明文查看、导出、配置变更、告警处理、高风险操作日志。
- 支持按操作人、对象、模块、时间、结果查询。
审计事件统一模型:
| 字段 | 说明 |
|---|---|
audit_id | 审计记录 ID |
trace_id | 请求追踪 ID |
operator_id | 操作人 |
operator_roles | 操作时角色 |
module | 中心或模块 |
action | 查询、导出、修改、明文查看等 |
object_type | 客户、订单、用户、权限、告警等 |
object_id | 对象 ID |
data_scope | 操作涉及的数据范围 |
before_value | 变更前值 |
after_value | 变更后值 |
reason | 操作原因 |
source_ip | 来源 IP |
result | 成功、失败 |
created_at | 操作时间 |
3.11 告警服务
职责:
- 汇总数据源异常、查询聚合超时、通道异常、短信异常、回调延迟等事件。
- 提供告警列表、详情、认领、备注、关闭和恢复记录。
- 将告警处理动作写入审计。
告警来源:
- 查询聚合服务上报数据源失败和超时。
- 数据源路由服务上报无可用数据源。
- 支付通道适配器上报通道异常。
- 短信适配器上报成功率异常。
- 定时任务上报回调延迟、状态不一致等异常。
4. 核心调用链路
4.1 登录与门户加载
用户选择账号密码 / 飞书 / Lark 登录
-> 身份源与登录服务完成本地校验或三方授权回调校验
-> 身份源与登录服务解析外部身份并映射后台内部用户
-> 后台网关校验后台用户账号状态
-> 用户与角色服务生成统一后台会话
-> 权限服务计算系统入口、菜单、动作和数据范围
-> 门户返回可访问中心、菜单、工作台摘要
-> 审计服务记录登录日志关键要求:
- 后台会话必须绑定后台内部用户 ID,不能直接绑定飞书或 Lark 外部用户 ID。
- 登录审计需要记录登录方式、身份源类型、租户 ID、外部用户 ID 摘要和后台用户 ID。
- 停用、锁定、离职账号不能登录。
- 未绑定后台用户的三方身份不能直接进入后台业务页面。
- 权限变更后,权限缓存需要刷新或要求用户重新登录。
- 门户只展示用户有权限访问的中心和菜单。
4.2 查询链路
前端发起查询
-> 网关校验登录态和基础权限
-> 查询聚合服务校验资源动作权限
-> 权限服务返回有效数据范围
-> 数据源路由服务定位数据源
-> 查询聚合服务调用业务适配器
-> 敏感数据服务脱敏
-> 查询聚合服务合并结果并标记来源
-> 审计服务记录查询事件
-> 前端展示结果、来源和部分失败提示关键要求:
- 查询必须携带系统、资源、动作、查询条件和当前 App 范围。
- 后端必须以权限服务返回的数据范围为准,不能信任前端传入范围。
- 跨 App 查询允许部分失败,但必须返回失败来源和原因。
4.3 明文查看链路
用户点击查看明文
-> 前端要求填写原因
-> 网关校验登录态
-> 敏感数据服务校验 view_sensitive 权限和字段范围
-> 查询聚合服务或适配器读取原始字段
-> 敏感数据服务返回明文
-> 审计服务记录明文查看日志关键要求:
- 明文查看必须独立接口。
- 明文查看必须填写原因。
- 明文字段不得进入普通列表接口缓存。
4.4 导出链路
用户提交导出申请
-> 导出服务校验导出权限、字段范围、数据范围和原因
-> 创建导出任务
-> 异步调用查询聚合服务分批拉取数据
-> 敏感数据服务按导出字段权限处理字段
-> 生成文件、水印和文件摘要
-> 审计服务记录导出日志
-> 用户下载文件关键要求:
- 导出任务必须异步。
- 导出数据范围不能超过用户查询权限。
- 导出字段范围不能超过用户字段权限。
- 文件下载也必须校验下载人和任务归属。
4.5 配置变更链路
用户修改 App / 角色 / 数据范围 / 敏感权限
-> 网关校验登录态
-> 权限服务校验管理权限
-> 服务执行业务校验和变更
-> 写入变更前后值
-> 刷新相关缓存
-> 审计服务记录配置变更日志关键要求:
- 数据源关系、权限授权、敏感权限、导出权限属于高风险变更。
- 高风险变更必须记录原因。
- 权限和数据源变更后,需要刷新权限缓存、路由缓存或查询缓存。
5. 数据模型设计
5.1 核心配置表
| 表 | 说明 |
|---|---|
admin_user | 后台用户 |
admin_identity_source | 身份源配置,如账号密码、飞书、Lark |
admin_user_identity_binding | 后台用户与外部身份绑定关系 |
admin_role | 后台角色 |
admin_user_role | 用户角色关系 |
admin_permission | 权限点定义 |
admin_role_permission | 角色权限关系 |
admin_user_permission_override | 用户单独授权和显式禁用 |
admin_data_scope | 数据范围定义 |
admin_user_data_scope | 用户数据范围 |
admin_sensitive_permission | 敏感字段权限 |
admin_menu | 菜单定义 |
admin_app_registry | App 注册信息 |
admin_data_source | 数据源定义 |
admin_app_data_source | App 与数据源关系 |
5.2 运行过程表
| 表 | 说明 |
|---|---|
admin_audit_log | 操作审计日志 |
admin_export_task | 导出任务 |
admin_export_file | 导出文件信息 |
admin_alert | 告警主表 |
admin_alert_event | 告警事件和处理记录 |
admin_route_log | 数据源路由日志,可按需保留 |
admin_query_log | 查询日志,可与审计日志合并 |
admin_login_log | 登录日志,可与审计日志合并 |
5.3 身份源绑定表建议
admin_identity_source 用于配置可用登录身份源。
| 字段 | 说明 |
|---|---|
source_id | 身份源配置 ID |
source_type | password、feishu、lark 等 |
source_name | 页面展示名称 |
tenant_id | 三方租户或组织标识 |
app_id | 三方应用 ID,敏感配置可只存引用 |
status | 启用、停用 |
callback_url | 授权回调地址 |
created_at | 创建时间 |
updated_at | 更新时间 |
admin_user_identity_binding 用于记录后台用户与外部身份的绑定关系。
| 字段 | 说明 |
|---|---|
binding_id | 绑定关系 ID |
user_id | 后台内部用户 ID |
source_type | password、feishu、lark 等 |
tenant_id | 三方租户或组织标识 |
external_user_id | 三方用户唯一标识 |
open_id | 三方平台 Open ID,按平台能力存储 |
union_id | 三方平台 Union ID,按平台能力存储 |
external_email | 三方返回邮箱,不能作为唯一匹配依据 |
external_mobile | 三方返回手机号,默认脱敏存储或加密存储 |
binding_status | 待确认、已绑定、已解绑、已失效 |
is_primary_login | 是否主登录方式 |
last_login_at | 最近登录时间 |
bound_at | 绑定时间 |
unbound_at | 解绑时间 |
约束要求:
source_type + tenant_id + external_user_id必须唯一。open_id、union_id的唯一约束需要按平台和租户分别设计,不能跨飞书与 Lark 共用。external_email、external_mobile只能用于展示、辅助确认或人工匹配,不能作为自动合并后台用户的唯一依据。
5.4 统一对象字段
业务适配器返回后台统一对象时,建议都补齐以下上下文字段:
| 字段 | 说明 |
|---|---|
business_line | 业务线 |
system_code | 系统编码 |
app_id | App ID |
app_name | App 名称 |
country_code | 国家 |
product_code | 产品 |
data_source_code | 数据源 |
customer_id | App 客户 ID |
global_customer_id | 全局客户 ID |
order_id | 业务订单号 |
global_order_id | 全局订单号 |
created_at | 创建时间 |
updated_at | 更新时间 |
6. 接口设计建议
6.1 门户接口
| 接口 | 说明 |
|---|---|
GET /admin/portal/me | 当前用户、角色、数据范围摘要 |
GET /admin/portal/entries | 当前用户可访问中心和系统入口 |
GET /admin/portal/menus | 当前用户可访问菜单 |
GET /admin/portal/workbench | 工作台摘要、最近访问、告警摘要 |
6.2 登录与身份源接口
| 接口 | 说明 |
|---|---|
POST /admin/auth/login | 账号密码登录 |
GET /admin/auth/providers | 查询可用登录身份源 |
GET /admin/auth/{source_type}/authorize | 获取飞书、Lark 等三方授权地址 |
GET /admin/auth/{source_type}/callback | 三方授权回调 |
POST /admin/auth/logout | 退出登录 |
GET /admin/users/{user_id}/identity-bindings | 查询用户身份绑定 |
POST /admin/users/{user_id}/identity-bindings | 管理员绑定身份源 |
DELETE /admin/users/{user_id}/identity-bindings/{binding_id} | 管理员解绑身份源 |
6.3 权限接口
| 接口 | 说明 |
|---|---|
POST /admin/auth/check | 校验资源动作权限 |
POST /admin/auth/data-scope/resolve | 计算当前请求有效数据范围 |
GET /admin/roles | 角色列表 |
GET /admin/permissions | 权限点列表 |
PUT /admin/users/{user_id}/roles | 配置用户角色 |
PUT /admin/users/{user_id}/data-scope | 配置用户数据范围 |
6.4 App 与路由接口
| 接口 | 说明 |
|---|---|
GET /admin/apps | App 列表 |
POST /admin/apps | 新增 App |
PUT /admin/apps/{app_id} | 编辑 App |
POST /admin/apps/{app_id}/enable | 启用 App |
POST /admin/apps/{app_id}/disable | 停用 App |
POST /admin/routes/resolve | 解析数据源路由 |
6.5 查询聚合接口
| 接口 | 说明 |
|---|---|
GET /admin/query/customers | 客户查询 |
GET /admin/query/applications | 进件查询 |
GET /admin/query/loans | 借款查询 |
GET /admin/query/disbursements | 放款查询 |
GET /admin/query/repayments | 还款查询 |
GET /admin/query/phone-orders | 手机分期订单查询 |
GET /admin/query/fund-flows | 资金流水查询 |
6.6 敏感、导出、审计、告警接口
| 接口 | 说明 |
|---|---|
POST /admin/sensitive/reveal | 查看敏感字段明文 |
POST /admin/exports | 创建导出任务 |
GET /admin/exports/{task_id} | 查询导出任务 |
GET /admin/exports/{task_id}/download | 下载导出文件 |
GET /admin/audit-logs | 查询审计日志 |
GET /admin/alerts | 告警列表 |
GET /admin/alerts/{alert_id} | 告警详情 |
POST /admin/alerts/{alert_id}/claim | 认领告警 |
POST /admin/alerts/{alert_id}/close | 关闭告警 |
POST /admin/alerts/{alert_id}/comments | 告警备注 |
7. 缓存与一致性
7.1 建议缓存
| 缓存 | 内容 | 失效时机 |
|---|---|---|
| 用户权限缓存 | 用户角色、菜单、动作、字段权限 | 用户授权变更、角色变更、账号状态变更 |
| 身份绑定缓存 | 用户绑定的账号密码、飞书、Lark 等身份 | 身份绑定、解绑、身份源停用 |
| 数据范围缓存 | 用户 App、国家、产品、门店、商户范围 | 数据范围变更 |
| App 注册缓存 | App 元数据、状态、产品关系 | App 配置变更 |
| 数据源路由缓存 | App 与数据源映射 | 数据源关系变更 |
| 菜单缓存 | 菜单树和资源点 | 菜单配置变更 |
7.2 一致性要求
- 权限收紧必须尽快生效,P0 建议不超过 5 分钟。
- 账号停用、锁定、离职必须立即失效会话。
- 三方身份解绑或身份源停用后,相关会话必须失效或在下一次请求被拒绝。
- 数据源关系变更后必须刷新路由缓存。
- 缓存异常时不能放大权限,应回源校验或拒绝访问。
8. 异常与降级
| 场景 | 处理方式 |
|---|---|
| 权限服务异常 | 拒绝访问或提示稍后重试,不允许默认放行 |
| 数据源路由失败 | 返回无数据源或路由失败原因 |
| 单个 App 数据源异常 | 返回部分成功,标明异常 App 和数据源 |
| 查询聚合超时 | 返回已完成数据源结果和超时来源 |
| 敏感明文读取失败 | 不返回明文,记录失败审计 |
| 导出失败 | 任务置为失败,记录失败原因 |
| 审计写入失败 | 核心高风险操作应失败或进入可靠补偿队列 |
| 告警服务异常 | 不影响主查询链路,但需要记录系统日志 |
9. 安全控制
- 所有后台接口必须登录后访问。
- 所有写操作必须校验资源动作权限。
- 所有查询必须校验数据范围。
- 所有敏感字段默认脱敏。
- 明文查看、导出、跨 App 查询、高风险配置必须独立授权。
- 不允许前端传入任意数据源编码直接查库。
- 不允许业务服务绕过审计执行高风险操作。
- 导出文件需要水印、过期时间和下载权限校验。
- 审计日志和导出文件摘要不可由普通管理员修改。
10. 部署建议
P0 可以按模块化服务部署,避免一开始拆得过细导致交付成本过高。
建议部署单元:
| 部署单元 | 包含能力 |
|---|---|
| 后台前端 | 统一门户和各中心页面 |
| 后台网关 | 登录态、鉴权拦截、路由、追踪 |
| 权限管理服务 | 用户、角色、权限、数据范围、菜单、身份绑定 |
| 身份源与登录服务 | 账号密码、飞书、Lark 等登录身份源和授权回调 |
| 管理底座服务 | App 注册、数据源路由、敏感数据、审计、告警 |
| 查询聚合服务 | 客户、订单、资金、分期等聚合查询 |
| 导出服务 | 异步导出、文件生成、文件下载 |
| 业务适配器服务 | 现金贷、手机分期、支付、短信等适配器 |
后续当查询量、导出量或业务复杂度上升时,可以再拆分客户聚合、资金聚合、告警、审计等独立服务。
11. P0 交付计划
11.1 第一阶段:权限和门户底座
- 用户、角色、菜单、资源动作权限。
- App 数据范围。
- 身份源与用户绑定模型,预留飞书、Lark 登录接入。
- 统一门户入口。
- 登录、会话、账号停用和锁定。
- 基础审计日志。
11.2 第二阶段:App 注册、路由和查询聚合
- App 注册中心。
- 数据源配置和路由。
- 现金贷客户、进件、借款、放款、还款查询聚合。
- 查询结果来源标识和部分失败处理。
11.3 第三阶段:敏感数据、导出和审计闭环
- 敏感字段目录和默认脱敏。
- 明文查看独立权限、原因和审计。
- 异步导出任务、文件水印、导出日志。
- 查询、导出、明文查看、配置变更审计。
11.4 第四阶段:共享客户、手机分期和运行保障
- 共享客户中心基础视图。
- 手机分期订单、首付、商户放款、还款查询。
- 运行保障告警列表、详情、认领、备注、关闭。
11.5 第五阶段:共享资金中心
- 放款流水、还款流水、通道交易、对账差异查询。
- 资金类导出。
- 资金异常定位。
12. 技术验收口径
- 新增现金贷 App 后,只配置 App、数据源和权限即可进入统一查询,不需要新增菜单。
- 后台用户只能看到授权中心、菜单和动作。
- 后台接口会重新校验权限和数据范围。
- 停用或锁定账号后,已有会话立即失效。
- 后台会话以内部用户 ID 为权限主体,不能直接以飞书或 Lark 外部用户作为权限主体。
- 同一后台用户可以绑定飞书、Lark 等多个身份源;同一外部身份不能绑定多个后台用户。
- 飞书和 Lark 身份按
source_type + tenant_id + external_user_id隔离,不能因邮箱或手机号相同自动合并。 - 客服查询客户、订单、还款时不需要知道底层数据源。
- 跨 App 查询只在授权 App 范围内执行。
- 单个 App 数据源异常时,其他 App 结果可正常返回,并提示部分失败。
- 敏感字段默认脱敏,明文查看必须独立授权、填写原因并写审计。
- 导出必须异步执行,独立鉴权,记录字段、范围、数量、文件摘要和原因。
- 权限变更、数据源变更、导出、明文查看、告警处理均可通过审计日志追溯。
- 系统管理员不默认拥有业务数据明文查看和导出权限。