Draft
As a 系统管理员 I want 创建租户基础包和租户管理功能 so that 能够为多租户系统提供基础的租户管理和上下文支持
@d8d/merchant-module 为 @d8d/tenant-module-mt 租户管理模块@d8d/merchant-module 为 @d8d/tenant-module-mt (AC: 1)
packages/
├── merchant-module/ (源包)
│ ├── src/
│ │ ├── entities/merchant.entity.ts
│ │ ├── services/merchant.service.ts
│ │ ├── routes/
│ │ ├── schemas/
│ │ └── types/
│ └── package.json
└── tenant-module-mt/ (目标包)
├── src/
│ ├── entities/tenant.entity.ts
│ ├── services/tenant.service.ts
│ ├── routes/
│ ├── schemas/
│ └── types/
└── package.json
从商户实体到租户实体的字段映射:
name (商户名称) → name (租户名称)username (用户名) → code (租户代码,唯一标识)password, loginNum, loginTime, loginIp, lastLoginTime, lastLoginIpstatus (租户状态), config (租户配置)重要说明:此租户认证中间件仅用于租户管理API,与认证模块的认证中间件是独立的两套系统。
采用Hono中间件模式与现有技术栈统一:
import { Context, Next } from 'hono';
export async function tenantAuthMiddleware(c: Context, next: Next) {
try {
const authHeader = c.req.header('Authorization');
if (!authHeader) {
return c.json({ message: 'Authorization header missing' }, 401);
}
const tokenParts = authHeader.split(' ');
if (tokenParts.length !== 2 || tokenParts[0] !== 'Bearer') {
return c.json({ message: 'Authorization header missing' }, 401);
}
const token = tokenParts[1];
if (!token) {
return c.json({ message: 'Token missing' }, 401);
}
// 验证JWT并提取租户ID
const decoded = jwt.verify(token, process.env.JWT_SECRET!) as any;
const tenantId = decoded.tenantId;
if (!tenantId) {
return c.json({ message: 'Tenant ID not found in token' }, 401);
}
// 设置租户上下文
c.set('tenantId', tenantId);
await next();
} catch (error) {
console.error('Tenant auth middleware error:', error);
return c.json({ message: 'Invalid token or tenant context' }, 401);
}
}
@d8d/shared-crud, @d8d/shared-types, @d8d/shared-utilstests/ 目录下| Date | Version | Description | Author |
|---|---|---|---|
| 2025-11-13 | 1.0 | 初始故事创建 | Claude |
此部分将由开发代理在实施过程中填写
{{agent_model_name_version}}
此部分将由QA代理在QA审查后填写