小编jmo*_*son的帖子

是否可以实现“基于列”的多租户,同时避免将tenantId添加到NestJS / TypeORM应用程序中的所有方法?

语境

我们正在使用 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 …

design-patterns multi-tenant typeorm nestjs

5
推荐指数
0
解决办法
491
查看次数

标签 统计

design-patterns ×1

multi-tenant ×1

nestjs ×1

typeorm ×1