diff --git a/packages/twenty-server/src/engine/metadata-modules/role-validation/role-validation.module.ts b/packages/twenty-server/src/engine/metadata-modules/role-validation/role-validation.module.ts index 2b83e2054c..2943b84a4f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role-validation/role-validation.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role-validation/role-validation.module.ts @@ -1,16 +1,10 @@ import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; - -import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { RoleValidationService } from 'src/engine/metadata-modules/role-validation/services/role-validation.service'; -import { provideWorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/provide-workspace-scoped-repository'; @Module({ - imports: [TypeOrmModule.forFeature([RoleEntity])], - providers: [ - RoleValidationService, - provideWorkspaceScopedRepository(RoleEntity), - ], + imports: [WorkspaceManyOrAllFlatEntityMapsCacheModule], + providers: [RoleValidationService], exports: [RoleValidationService], }) export class RoleValidationModule {} diff --git a/packages/twenty-server/src/engine/metadata-modules/role-validation/services/role-validation.service.ts b/packages/twenty-server/src/engine/metadata-modules/role-validation/services/role-validation.service.ts index e32cf4bfd6..c8721197b1 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role-validation/services/role-validation.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role-validation/services/role-validation.service.ts @@ -5,25 +5,29 @@ import { PermissionsExceptionCode, PermissionsExceptionMessage, } from 'src/engine/metadata-modules/permissions/permissions.exception'; -import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; -import { InjectWorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/inject-workspace-scoped-repository.decorator'; -import { WorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/workspace-scoped-repository'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; @Injectable() export class RoleValidationService { constructor( - @InjectWorkspaceScopedRepository(RoleEntity) - private readonly roleRepository: WorkspaceScopedRepository, + private readonly flatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService, ) {} async validateRoleAssignableToUsersOrThrow( roleId: string, workspaceId: string, ): Promise { - const role = await this.roleRepository.findOne(workspaceId, { - where: { - id: roleId, - }, + const { flatRoleMaps } = + await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps( + { + workspaceId, + flatMapsKeys: ['flatRoleMaps'], + }, + ); + const role = findFlatEntityByIdInFlatEntityMaps({ + flatEntityId: roleId, + flatEntityMaps: flatRoleMaps, }); if (!role) {