diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts index ed052584bed..41aae5b7fd0 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts @@ -51,6 +51,8 @@ export class UserWorkspaceService extends TypeOrmQueryService, @InjectRepository(UserEntity) private readonly userRepository: Repository, + // softRemove is not supported by WorkspaceScopedRepository. + // eslint-disable-next-line twenty/prefer-workspace-scoped-repository @InjectRepository(RoleTargetEntity) private readonly roleTargetRepository: Repository, private readonly roleValidationService: RoleValidationService, diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/ai-agent-execution.module.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/ai-agent-execution.module.ts index f87e25152f0..e5d576d38a2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/ai-agent-execution.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/ai-agent-execution.module.ts @@ -14,6 +14,7 @@ import { AiModelsModule } from 'src/engine/metadata-modules/ai/ai-models/ai-mode import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module'; +import { provideWorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/provide-workspace-scoped-repository'; import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module'; import { AgentMessagePartEntity } from './entities/agent-message-part.entity'; @@ -49,6 +50,7 @@ import { AgentAsyncExecutorService } from './services/agent-async-executor.servi AgentAsyncExecutorService, AgentActorContextService, AgentMessagePartResolver, + provideWorkspaceScopedRepository(RoleTargetEntity), ], exports: [ AgentAsyncExecutorService, diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/services/agent-async-executor.service.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/services/agent-async-executor.service.ts index 70355d1c76d..403dd406144 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/services/agent-async-executor.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-execution/services/agent-async-executor.service.ts @@ -45,6 +45,8 @@ import { } from 'src/engine/metadata-modules/ai/ai.exception'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { type RolePermissionConfig } from 'src/engine/twenty-orm/types/role-permission-config'; +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'; const EMPTY_USAGE: LanguageModelUsage = { inputTokens: 0, @@ -75,8 +77,8 @@ export class AgentAsyncExecutorService { private readonly nativeToolBinder: NativeToolBinderService, private readonly aiBillingService: AiBillingService, private readonly billingUsageService: BillingUsageService, - @InjectRepository(RoleTargetEntity) - private readonly roleTargetRepository: Repository, + @InjectWorkspaceScopedRepository(RoleTargetEntity) + private readonly roleTargetRepository: WorkspaceScopedRepository, @InjectRepository(WorkspaceEntity) private readonly workspaceRepository: Repository, ) {} @@ -104,10 +106,9 @@ export class AgentAsyncExecutorService { workspaceId: string, rolePermissionConfig?: RolePermissionConfig, ): Promise { - const roleTarget = await this.roleTargetRepository.findOne({ + const roleTarget = await this.roleTargetRepository.findOne(workspaceId, { where: { agentId, - workspaceId, }, select: ['roleId'], }); diff --git a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts index f3b8e0ee151..4f61e0bbdea 100644 --- a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts @@ -6,6 +6,7 @@ import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-t import { RoleTargetModule } from 'src/engine/metadata-modules/role-target/role-target.module'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; +import { provideWorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/provide-workspace-scoped-repository'; import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module'; @Module({ @@ -15,7 +16,10 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache WorkspaceCacheModule, RoleTargetModule, ], - providers: [UserRoleService], + providers: [ + UserRoleService, + provideWorkspaceScopedRepository(RoleTargetEntity), + ], exports: [UserRoleService], }) export class UserRoleModule {} diff --git a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts index 319b9808d01..54e09fba7e9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts @@ -15,14 +15,16 @@ import { RoleTargetService } from 'src/engine/metadata-modules/role-target/servi import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util'; +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 { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service'; import { STANDARD_ROLE } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-role.constant'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; export class UserRoleService { constructor( - @InjectRepository(RoleTargetEntity) - private readonly roleTargetRepository: Repository, + @InjectWorkspaceScopedRepository(RoleTargetEntity) + private readonly roleTargetRepository: WorkspaceScopedRepository, @InjectRepository(UserWorkspaceEntity) private readonly userWorkspaceRepository: Repository, private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager, @@ -101,10 +103,9 @@ export class UserRoleService { return new Map(); } - const allRoleTargets = await this.roleTargetRepository.find({ + const allRoleTargets = await this.roleTargetRepository.find(workspaceId, { where: { userWorkspaceId: In(userWorkspaceIds), - workspaceId, }, relations: { role: { diff --git a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step-operations.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step-operations.workspace-service.ts index 6c8b76486cc..32c9d86f524 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step-operations.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step-operations.workspace-service.ts @@ -27,6 +27,8 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util'; +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 { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service'; import { WorkflowVersionStepException, @@ -70,8 +72,8 @@ export class WorkflowVersionStepOperationsWorkspaceService { private readonly logicFunctionFromSourceService: LogicFunctionFromSourceService, private readonly codeStepBuildService: CodeStepBuildService, private readonly agentService: AgentService, - @InjectRepository(RoleTargetEntity) - private readonly roleTargetRepository: Repository, + @InjectWorkspaceScopedRepository(RoleTargetEntity) + private readonly roleTargetRepository: WorkspaceScopedRepository, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, private readonly workflowCommonWorkspaceService: WorkflowCommonWorkspaceService, @@ -100,12 +102,14 @@ export class WorkflowVersionStepOperationsWorkspaceService { break; } - const roleTarget = await this.roleTargetRepository.findOne({ - where: { - agentId: step.settings.input.agentId, - workspaceId, + const roleTarget = await this.roleTargetRepository.findOne( + workspaceId, + { + where: { + agentId: step.settings.input.agentId, + }, }, - }); + ); await this.agentService.deleteManyAgents({ ids: [step.settings.input.agentId], diff --git a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step.module.ts b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step.module.ts index 4813f253dca..c8014bb5062 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step.module.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step.module.ts @@ -9,6 +9,7 @@ import { LogicFunctionModule } from 'src/engine/metadata-modules/logic-function/ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; +import { provideWorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/provide-workspace-scoped-repository'; import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module'; import { WorkflowCommonModule } from 'src/modules/workflow/common/workflow-common.module'; import { WorkflowSchemaModule } from 'src/modules/workflow/workflow-builder/workflow-schema/workflow-schema.module'; @@ -43,6 +44,7 @@ import { WorkflowVersionStepWorkspaceService } from 'src/modules/workflow/workfl WorkflowVersionStepCreationWorkspaceService, WorkflowVersionStepUpdateWorkspaceService, WorkflowVersionStepDeletionWorkspaceService, + provideWorkspaceScopedRepository(RoleTargetEntity), ], exports: [ WorkflowVersionStepWorkspaceService,