Skip to content

项目结构

IAM/
├── apps/
│ ├── web/
│ │ ├── e2e/ # Playwright 用例
│ │ └── src/
│ │ ├── app/ # Next.js App Router 页面与代理 route
│ │ ├── components/ # shadcn/ui 与业务组件
│ │ ├── hooks/ # 客户端 hooks
│ │ ├── lib/ # auth、代理、访问控制与工具
│ │ └── utils/ # tRPC 客户端
│ ├── server/
│ │ └── src/
│ │ ├── index.ts # Hono Worker 应用与全部外部路由
│ │ └── node.ts # Node 本地运行入口
│ └── docs/
│ └── src/content/docs/ # Starlight Markdown/MDX
├── packages/
│ ├── contracts/src/ # 前后端共享契约与纯函数
│ ├── api/src/routers/ # tRPC 领域路由
│ ├── auth/src/ # Better Auth、企微、邮件、限流和授权
│ ├── db/src/
│ │ ├── schema/ # auth 与 wecom schema
│ │ └── migrations/ # Drizzle migrations
│ ├── env/src/ # server.ts / web.ts
│ └── config/ # 共享 tsconfig
├── README.md
├── TODO.md
├── turbo.json
└── pnpm-workspace.yaml
  • 登录、资料补全、个人设置、我的应用和管理控制台
  • 通过 Better Auth Client 调用同源 /api/auth/*
  • 通过 tRPC + TanStack Query 获取服务端数据
  • /api/[...path]/trpc/[...path] 代理到 iam-api
  • src/proxy.ts 处理页面登录态、资料完整性与管理端路由权限

Web 不得运行时导入 @IAM/auth@IAM/db@IAM/env/server,对 @IAM/api 只允许类型导入。

  • Better Auth handler 与 OAuth/OIDC 端点
  • tRPC endpoint
  • RFC 8414 / OIDC discovery
  • R2 上传与文件读取
  • 企业微信通讯录回调和内部全量同步
  • 健康检查、CORS 和 Worker Binding 注入

Astro Starlight 文档站。内容、导航和根 README/TODO 应随代码能力同步更新。

Package 职责
@IAM/contracts 共享类型、Zod schema、枚举和不依赖服务端的纯函数
@IAM/api tRPC context、权限守卫及 users/oauth-clients/sessions/dashboard 等路由
@IAM/auth Better Auth 实例、插件、企微身份、应用授权、邮件、审计和限流
@IAM/db Drizzle 数据库实例、auth/wecom schema 与 migrations
@IAM/env 服务端和前端环境变量校验
@IAM/config 共享 TypeScript 配置
apps/web ──► @IAM/contracts ◄── @IAM/api ──► @IAM/auth ──► @IAM/db ──► @IAM/env
└──────────── apps/server ────────────────────────────────►

边界原则:

  1. 前后端共享类型、Zod schema 和纯函数放入 @IAM/contracts
  2. 认证标准能力优先调用 Better Auth 原生 API。
  3. 业务数据从 Web 端优先通过 tRPC 获取。
  4. 数据库与 secret 只在 Server/API/Auth/DB 层使用。
  • 公开:/login/oauth-login/consent/forgot-password/reset-password
  • 登录用户:/apps/profile/complete-profile
  • 管理端:/admin/dashboardusersorganizationrolessessionsaudit-logsoauth-clientsconsentssettings