第1章 审批流与权限模型的关系全景:整体架构、核心概念、落地价值
审批流与权限模型是企业级业务流程系统的两大支柱:审批流负责“事情按什么步骤走”,权限模型负责“谁能做什么”。二者在逻辑上正交,在运行时却深度耦合。本章从架构全景出发,明确边界、分层、组件职责、数据流/控制流/信任链路,并给出选型权衡、风险点、落地步骤与验收标准,为后续29章的案例剖析奠定统一的认知框架。
1.1 整体架构:四层协同模型
审批流与权限模型的集成架构可抽象为四层,从上到下依次为业务应用层、审批流引擎层、权限模型层和数据持久层。上层依赖下层提供的服务,下层通过接口向上层输出能力,层间以标准化契约解耦。
架构要点:审批流引擎与权限模型在逻辑上属于独立域,但在运行时通过“任务-角色-权限”三元组完成信任握手。业务层只关心“谁提交了什么单据”,审批流层聚焦“下一步路由到谁”,权限模型层回答“该用户是否有权执行此操作”。
1.2 边界定义与分层原则
四层架构的每一层都有清晰的职责边界,层间通过接口契约通信,不允许跨层直接访问内部状态。
| 层级 | 职责边界 | 对外接口 | 依赖关系 |
|---|---|---|---|
| 业务应用层 | 接收用户输入、展示审批状态、触发流程 | REST / RPC / 消息 | 依赖审批流引擎层 |
| 审批流引擎层 | 流程定义解析、节点路由、任务分派、超时与驳回 | 流程控制 API | 依赖权限模型层做决策 |
| 权限模型层 | 身份认证、角色映射、策略评估、鉴权结果返回 | 鉴权 SDK / 策略查询 | 依赖数据持久层 |
| 数据持久层 | 用户、角色、资源、策略的存储与缓存 | DAO / 数据服务 | 无上层依赖 |
设计原则:审批流引擎只关心“谁在什么节点”,不关心“该用户是否有权限操作单据”;权限模型只回答“用户/角色是否具备某权限”,不参与流程路由逻辑。职责分离是架构可演进的基础。
1.3 组件职责细化
每一层由若干核心组件构成,组件间通过内部总线或事件驱动协作。
- 业务应用层:流程发起组件负责组装审批单据并调用引擎启动流程;任务看板组件聚合待办、已办和抄送。
- 审批流引擎层:流程定义仓库维护 BPMN/DSL 模型;路由调度器根据条件表达式决定下一步节点;任务分配器调用权限模型获取候选用户/角色。
- 权限模型层:策略决策点(PDP)解析 RBAC/ABAC 策略;策略执行点(PEP)拦截请求并缓存结果;角色解析器处理用户-角色-权限的多级映射。
- 数据持久层:用户仓储、角色仓储、资源仓储各自独立 schema,通过外键或聚合根关联。
1.4 数据流、控制流与信任链路
理解三个流向是架构落地的关键。
| 流向类型 | 路径描述 | 传递内容 | 典型协议 |
|---|---|---|---|
| 数据流 | 业务层 → 审批流层 → 权限层 → 数据层 | 单据数据、流程实例、角色/权限缓存 | JSON / Protobuf |
| 控制流 | 审批流层 ←→ 权限层(双向决策) | 任务分配请求、鉴权结果、策略变更事件 | gRPC / 事件总线 |
| 信任链路 | 任务 Token → 用户身份 → 角色凭证 → 权限断言 | JWT / OAuth2 Token | HTTP Header / Token |
信任链路风险:如果权限模型的 Token 在审批流节点间透传时未做签名校验,可能被中间人伪造身份。必须保证每个跨层调用都携带经过签名的上下文(如 JWT + 角色声明),并在权限模型层做完整性校验。
1.5 选型权衡
落地时需要在以下维度做出取舍,不同规模与行业侧重点差异明显。
| 维度 | 方案 A | 方案 B | 推荐场景 |
|---|---|---|---|
| 权限模型 | RBAC(角色驱动) | ABAC(属性驱动) | RBAC 适合组织架构稳定、角色清晰的企业;ABAC 适合多维度动态授权的 SaaS / 金融场景 |
| 审批流引擎 | BPMN 标准引擎(如 Flowable) | 轻量 DSL 引擎(自研) | BPMN 适合复杂流程、合规审计要求高的行业;轻量 DSL 适合互联网高频、快速迭代的业务 |
| 集成方式 | 引擎内嵌权限 SDK | 权限独立服务 + 网络调用 | 内嵌方式延迟低,适合高吞吐场景;独立服务适合多系统复用权限模型 |
| 数据一致性 | 强事务(XA / TCC) | 最终一致性(事件驱动) | 强事务适合财务、合同等严谨流程;最终一致性适合审批链路长、吞吐量大的业务 |
选型建议:对于首次落地,建议从 RBAC + 轻量 BPMN 子集 + 内嵌 SDK 开始,降低复杂度;后续根据业务增长逐步演进到 ABAC 和独立权限服务。
1.6 风险点与应对策略
- 权限扩散风险:审批流中临时授权(如转办、加签)若未回收,会导致权限边界模糊。
应对:设置临时授权有效期,超时自动回收;记录授权审计日志。 - 跨层循环依赖:审批流引擎调用权限模型,权限模型又反向查询审批流状态,形成循环调用。
应对:权限模型只依赖数据层,不反向查询流程状态;需要流程信息时由上层传入上下文。 - 策略与流程版本不一致:流程定义升级后,旧版本仍在运行的实例权限策略与新版本冲突。
应对:权限策略绑定流程版本号,每个实例运行时锁定对应的策略版本。 - 缓存穿透与授权延迟:高频审批场景下,权限缓存过期可能导致大量请求穿透到数据库。
应对:采用本地缓存 + 分布式缓存两级架构,缓存预热,并设置合理的 TTL + 异步刷新。
1.7 落地步骤
从零到一搭建审批流与权限模型的集成体系,建议按以下五个步骤推进。
- 业务建模与边界对齐:梳理业务流程中的审批节点、角色定义、资源类型,产出四层架构映射矩阵。
- 接口契约定义:明确审批流引擎与权限模型之间的 API 合约(任务分配接口、鉴权接口、角色查询接口),使用 protobuf / OpenAPI 描述。
- 核心链路预演:选取一条典型审批链路(如“采购申请 → 部门审批 → 财务审批”),走通“业务层 → 引擎层 → 权限层 → 数据层”的全流程。
- 兜底与降级策略:当权限服务不可用时,审批流引擎应支持本地策略缓存 + 降级到默认角色,避免流程阻塞。
- 灰度上线与观察:选取 10%~20% 的业务流量验证集成正确性,监控任务分配时延、鉴权通过率、缓存命中率等指标。
落地检查点:每完成一步都要做集成测试,确保层间接口的请求/响应结构、错误码、超时阈值与设计一致。
1.8 验收标准
架构交付需通过以下验收条目,方可视为达到生产就绪状态。
- 功能验收:典型审批路径(含同意、驳回、转办、加签)的每一步均能正确触发权限校验,非法操作被明确拒绝并返回规范错误码。
- 性能验收:在 200 QPS 的负载下,审批流引擎调用权限模型的 P99 延迟低于 50ms,缓存命中率 ≥ 95%。
- 安全验收:信任链路中所有 Token 均经过签名与时间戳校验,日志中可完整追溯“用户 → 角色 → 权限 → 操作”的审计链。
- 可运维验收:权限策略支持热更新,无需重启审批流引擎;单层故障(如权限服务宕机)有明确的降级文案和恢复步骤。
- 文档验收:产出四层架构设计文档、接口契约说明书、故障恢复手册,并由至少两个团队成员完成交叉复核。
验收节奏:建议分三阶段——第1周完成功能验收,第2周完成性能与安全验收,第3周完成可运维与文档验收,确保架构质量经得起生产环境考验。