2.6 KiB
基础包(crm-base)
通用能力与非业务域原语。不装 controller、不建业务表,只提供基础设施:异常体系、响应封装、分页、雪花 ID、MyBatis-Plus 扩展、数据权限词汇、安全上下文工具。跨模块 seam 也放在这里。
Language
批量执行器:
BatchRunner——跨模块非原子批量操作的统一编排协议(ADR-0028),与 BatchResult<F>(结果骨架)同居 domain.result 组成批量协议家族。静态 run(ids, op, bizFail, unknownFail):空判短路 → 逐条委派单条操作(调用方传 self 代理方法引用保每条独立事务,ADR-0023 D1)→ 业务异常经 bizFail(id, e) 翻译收集 → 未知异常 log + unknownFail(id, e) 兜底且不中断后续 → 组装 BatchResult。失败项类型 F 经函数参数注入(各域失败项类提供 bizOf/unknownOf 翻译工厂,如 crm-lead 的 LeadBatchFailItem),本类无业务枚举依赖,保持 crm-base 非业务纯净(ADR-0023 D2/D5)。
Avoid: 批量服务、BatchService、批量框架(要点是「编排协议的静态执行器 + 翻译知识在域」)
权限种子器:
一个 seam interface,让任意业务模块声明式地将自己的权限点(button 节点)种子化到权限资源树(sys_menu 物理表),而不需要知道该表的物理 schema。调用方通过 PermissionModuleDescriptor 声明目录名、菜单名、按钮列表、目标角色编码;实现方(在 crm-auth 中)拥有 sys_menu 的全部字段知识,负责 find-or-create 幂等写入与角色绑定。替代了此前的影子实体方案——crm-dict 曾创建 SysMenuSeed 等重复实体类直接映射 sys_menu 表,导致 schema 泄漏。
Avoid: 权限初始化器、权限注入器、权限注册器
权限模块描述符:
权限种子化的声明单元。一个描述符 = 一个目录 + 一个菜单 + 一组按钮 + 目标角色编码列表。目录幂等——同一目录名被多次 seedModule 只创建一次。调用方不暴露 sys_menu 的任何字段名、枚举值或默认值;denyBehavior、status、visible 等 schema 默认值由种子器实现方硬编码。
Avoid: 权限配置、种子描述文件
按钮种子:
权限模块描述符中一条按钮权限点的最小声明:名称、权限码、接口 URL、排序。不包含 denyBehavior/status/visible——这些是 sys_menu 的 schema 细节,由种子器实现方统一硬编码。需要不同值的管理员在启动后通过资源管理 API 修改。
Avoid: 按钮配置、权限点定义