Files
Edu/services/iam
SpecialX f658571726 fix(iam): 修复 TS 编译错误、ESM 依赖注入与身份头读取
P1 端到端验证中发现 IAM 服务存在 14 个 TS 编译错误与运行时 DI 失败:

- 移除 typeorm/ioredis/kafkajs 依赖(IAM 用 Drizzle)
- health.controller.ts 改用 db.execute(sql SELECT 1) 校验连接
- lifecycle.service.ts 简化为只关闭 Drizzle 连接池
- Drizzle API 修正:r.roles -> r.iam_roles,.in() -> inArray()
- ESM 模式下 DI 必须显式 @Inject(IamRepository)(参考 classes 黄金模板)
- iam.controller.ts 直接读 req.headers[x-user-id],不依赖未注册的 AuthMiddleware
- health.module.ts 补 .js 后缀
- package.json 补 @types/express

验证:register -> JWT -> Gateway /iam/me 200 -> /classes CRUD 200
2026-07-09 00:25:37 +08:00
..

IAM Service

身份与访问管理服务Identity and Access ManagementP2 身份阶段交付。

职责

  • 用户注册 / 登录 / 刷新令牌
  • 角色Role与权限Permission管理
  • Access / Refresh Token 签发与校验
  • 用户信息查询(供 BFF / Gateway 聚合)

技术栈

  • NestJS 10 + TypeScriptESM
  • Drizzle ORM + MySQL
  • bcrypt 密码哈希
  • jsonwebtokenP2 骨架使用 HS256后续切 RS256
  • pino 日志 / prom-client 指标 / OpenTelemetry 链路

端口

默认 3002,通过 PORT 环境变量覆盖。

API

Method Path 说明
POST /iam/register 注册
POST /iam/login 登录
POST /iam/refresh 刷新令牌
GET /iam/me 当前用户信息(需 x-user-id 头)

健康检查

端点 用途 鉴权
GET /healthz 存活探针liveness仅返回进程状态不检查依赖
GET /readyz 就绪探针readiness检查 DB 连接,失败返回 503

实现见 src/shared/health/health.controller.ts5 个 NestJS 服务iam/core-edu/content/msg/classes一致。

数据表

iam_users / iam_roles / iam_user_roles / iam_permissions / iam_role_permissions / iam_refresh_tokens