我们正在使用 NestJS 和 TypeORM(使用 PostgreSQL)构建后端,并确定对我们来说最佳的多租户策略是利用共享数据库/共享模式,其中列(companyId)用于识别所有租户的“租户”(公司)。我们的桌子。
我们通过从请求中检索companyId(当前从查询参数中检索,但一旦身份验证到位,它将在 JWT 令牌中)并将 传递给companyId从控制器到服务,然后到存储库。
例如 :
该CatsController.create方法从 中获取 companyId@Query('companyId')并将其传递给我们的服务:
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
create(
@Query('companyId') companyId: string,
@Body() createCatDto: CreateCatDto,
) {
return this.catsService.create(companyId, createCatDto);
}
}
Run Code Online (Sandbox Code Playgroud)
CatsService.create我们服务上的方法也将其companyId作为参数传递给存储库:
@Injectable()
export class CatsService {
constructor(
@InjectRepository(Cat)
private readonly catRepository: Repository<Cat>,
) {}
create(companyId: string, createCatDto: CreateCatDto) {
return this.catRepository.save({ ...createCatDto, companyId });
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个示例项目,其中包含我们的实现的简化版本,以演示它如何变得复杂并导致大量用于管理所有类方法的 companyId …