enterprise-auth-platform 是一套企业级管理后台基座:不是单一的权限管理平台,而是用于快速孵化各类企业管理后台的通用底座。基座内置认证、RBAC、多租户、组织架构、系统管理、日志、通知、文件、工作流、代码生成等横向能力,业务系统在此之上做增量开发。
说明:仓库名与 Java 包名
com.enterprise.auth.platform沿用了项目早期"认证平台"阶段的命名,当前定位以本 README 为准;包名改名成本较高,计划在后续大版本统一处理。
本轮目标是稳定化和性能收敛,不继续拆分模块或引入微服务。第一批已完成前端格式门禁、前端单元测试门禁、useCrudGrid 泛型化和测试补齐;第二批已完成普通 CRUD 列表迁移,并将工作流待办/已办和通知收件箱的分页、总数与催办统计下推到数据库。真实 Redis/Redisson 集成测试和端到端测试均为显式启用,未配置依赖服务时不会伪造通过。
当前剩余事项以本文“后续方向”和 frontend-vben/apps/web-ele/src/composables/CRUD_MIGRATION.md 为准;历史审查文档中的快照数字仅用于追溯。
- Java 17 + Spring Boot 3.5
- Sa-Token(Redis Session +
Authorization: BearerHeader Token) - MyBatis-Plus + MySQL 8.0 + HikariCP
- Redis / Redisson
- Flyway 数据库迁移
- Knife4j(OpenAPI 文档)
- EasyExcel、MinIO/S3、ip2region
- Vben Admin v5(pnpm monorepo,位于
frontend-vben/) - 业务应用:
frontend-vben/apps/web-ele(Vue 3 + TypeScript + Vite + Element Plus) - 后端菜单驱动动态路由(
accessMode: backend),权限指令v-access:code - 权限码常量集中于
src/constants/permissions.ts(与后端PermissionCodes.java对齐) - CRUD 列表页范式:
useCrudGrid(vxe-grid 封装,见src/composables/CRUD_MIGRATION.md),语言策略为中文单语
代码根:src/main/java/com/enterprise/auth/platform,按 interfaces / application / domain / infrastructure 四层组织,模块间通过 Facade 协作,边界由 ModuleBoundaryTest(ArchUnit)守护。
| 分类 | 模块 |
|---|---|
| 认证与安全 | auth(登录/会话/验证码/注册)、security(平台与租户安全策略) |
| 组织与权限 | user、role、dept、menu、catalog(角色/部门/租户目录聚合) |
| 多租户 | tenant(租户、套餐、能力覆盖) |
| 系统管理 | system(字典/参数/公告/分类)、notification(站内通知 + SSE)、file(MinIO/S3/本地存储 + 存储健康检查) |
| 观测与日志 | log(操作日志/登录日志 + IP 归属地)、dashboard(运行总览统计,DashboardMetrics 领域模型) |
| 效率工具 | codegen(代码生成:domain 渲染器 + JDBC 元数据提取 + ZIP/落盘)、workflow(轻量审批流:定义/实例/任务三服务 + 驳回策略状态机) |
横向支撑:
common/:统一响应ApiResponse、全局异常、租户/时区上下文(TenantContextSupport)、分页归一(PaginationSupport)、数据权限(DataScope)、限流拦截、缓存名称登记infrastructure/:Sa-Token 集成、MyBatis-Plus 配置、Redisson、第三方集成(MinIO、邮件、IP 定位)
- Actuator:
/actuator/health(含 DB、Redis、fileStorage 组件检查)、/actuator/prometheus(Micrometer 指标,带application标签);dev/local 额外暴露metrics并显示健康明细,prod 收敛为health,info,prometheus - 结构化日志:
logback-spring.xml—— 非 prod 环境保持 Spring Boot 控制台可读输出,prod 输出 JSON(logstash-logback-encoder,含 MDC 透传) - 注意:
/actuator/**不在 Sa-Token 拦截范围(只拦/api/**),生产环境需靠网络层保护
- 账号密码登录、滑块验证码、登录风控、会话管理与强制下线
- RBAC + 菜单权限 + 按钮权限码,权限快照恢复与前端动态菜单
- 多租户隔离、租户上下文透传、平台管理员跨租户操作、租户套餐与能力覆盖
- 操作日志/登录日志、CSV 导出(含公式注入防护)、IP 归属地解析
- 站内通知(SSE 实时推送)、公告(富文本)、邮件通道配置
- 文件上传/下载/公开访问,MinIO/S3 与本地存储切换
- 轻量工作流:流程定义、发起/待办/已办、驳回策略(END/PREVIOUS/RESTART)、转签、催办
- 代码生成:表元数据 → 预览/落盘/ZIP 下载,可选自动注册菜单与权限
后端接口文档由 Knife4j 提供,本地启动后访问 http://localhost:8080/doc.html(生产环境默认关闭)。README 不再维护接口清单,以运行时文档为准。
首次启动前先准备 MySQL 与 Redis;应用启动时会自动执行 src/main/resources/db/migration 下的 Flyway 迁移(V1__baseline.sql 基线 + 增量脚本)。
mvn spring-boot:run "-Dspring-boot.run.profiles=local"默认端口:8080
连接信息通过环境变量注入(也可复制 application-local.example.yml 为 application-local.yml 本地覆盖,已加入 .gitignore):
$env:DB_URL='jdbc:mysql://127.0.0.1:3306/enterprise_auth_platform?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true'
$env:DB_USERNAME='root'
$env:DB_PASSWORD='<your-local-password>'
$env:REDIS_HOST='127.0.0.1'
$env:REDIS_PORT='6379'
mvn spring-boot:run "-Dspring-boot.run.profiles=local"cd frontend-vben
pnpm install
pnpm dev:ele默认端口:5777(apps/web-ele/.env.development 中 VITE_PORT),开发代理指向后端 /api。
application.yml:基线配置,不含 DB/Redis 明文,必须通过环境变量注入application-dev.yml/application-staging.yml/application-prod.yml:按环境覆盖(DEV_*/STAGING_*前缀环境变量)- 常用环境变量:
DB_URL、DB_USERNAME、DB_PASSWORD、REDIS_HOST、REDIS_PORT、REDIS_PASSWORD、APP_CORS_ALLOWED_ORIGIN、APP_SECURITY_SESSION_IDLE_SECONDS、APP_SECURITY_MAX_LOGIN_COUNT、APP_IDEMPOTENCY_FAILURE_MODE、FLYWAY_ENABLED、MINIO_ACCESS_KEY、MINIO_SECRET_KEY
# 快速单元测试:排除标记为 integration 的测试,不执行全局覆盖率门禁
mvn -Punit-tests test
# 完整验证:需要可用的 MySQL 和 Redis,并执行全局覆盖率门禁
mvn verify后端集成测试依赖可连接的 MySQL 与 Redis,可用 TEST_* 环境变量覆盖测试库连接(见 src/test/resources/application.yml)。使用 Testcontainers 的真实 Redis/Redisson 集成测试标记为 integration,在没有 Docker 或外部服务时应显式跳过或快速失败,不访问未知公网服务。
cd frontend-vben
pnpm check:type # 类型检查
pnpm test:unit # Vitest 单元测试
pnpm build:ele # 构建 web-ele
pnpm lint # 格式与代码检查
pnpm --filter @vben/web-ele test:e2e # 仅运行已配置的 Playwright smoke 用例端到端测试默认跳过依赖后端、登录状态或可变测试数据的用例。设置 E2E_SMOKE=1、E2E_BACKEND=1 和相应的 E2E_* 环境变量后,才会执行对应业务流程。
.github/workflows/ci.yml:
backend:MySQL/Redis service 容器 +mvn verify(含 ArchUnit 模块边界测试与 JaCoCo 报告);mvn -Punit-tests test用于不依赖外部服务的快速单元测试。frontend:pnpm 安装 +lint+test:unit+check:type+build:ele。
- 前端
POST /api/auth/login(租户 + 账号密码 + 滑块验证码) - 后端创建 Sa-Token Redis Session,返回 Bearer token
- 前端持
Authorization: Bearer <token>调用GET /api/auth/me恢复用户、菜单和权限快照 - 改密、禁用、强制下线通过会话版本与 Redis Session 实现
约束:主链路不依赖 Cookie、不启用 CSRF Token、无自建 refresh token;浏览器只持有 Sa-Token 的 Bearer token。
- 前端:普通分页页面已经统一到
useCrudGrid。剩余直接使用底层useVbenVxeGrid的页面是部门树、菜单树、租户目录双列表和代码生成双列表;工作流列表作为特殊交互单独评估。真实清单、迁移理由和验收条件见frontend-vben/apps/web-ele/src/composables/CRUD_MIGRATION.md。 - 前端质量:继续为已迁移页面补齐
TRow、TQuery、TId类型参数,并在具备测试环境时执行登录、租户切换、授权、强退、工作流和代码生成端到端用例。 - 后端列表:工作流待办/已办的权限条件、总数、排序、分页和当前页催办聚合已下推数据库;通知直接消息与广播公告已采用统一投影分页。后续用真实数据量执行
EXPLAIN和性能基线,重点观察深分页与候选关系表索引。 - 后端幂等:
@Idempotent已接入 Redis/Redisson,当前继续补真实 Redis 集成验证、慢请求锁租期验证,并明确 Redisson 不可用时的失败策略。 - 用户语义:统一数据库全局用户名唯一约束、登录、密码重置和错误提示的产品语义。
- 发布准备:补齐后端镜像、MySQL/Redis/MinIO 一体化 Compose、迁移验证、健康检查、版本标签、压测和告警后,再发布第一个非快照版本。
- 运维:网关、配置中心、消息队列、分布式事务和任务调度继续作为
future-components可选能力;正式启用前先完成版本矩阵和启动冒烟验证。 - 测试:集成测试(带
@Tag("integration"))依赖真实中间件或 Testcontainers;mvn -Punit-tests test只运行快速单元测试并跳过全局覆盖率门禁,完整mvn verify再执行集成测试和覆盖率门禁。