diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts index d53581133..9171316aa 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts @@ -70,35 +70,36 @@ export class WorkspacePermissionsCacheService { workspaceId, ); - let currentRolesPermissions: ObjectRecordsPermissionsByRoleId | undefined = - undefined; + try { + let currentRolesPermissions: ObjectRecordsPermissionsByRoleId | undefined; - if (roleIds) { - currentRolesPermissions = - await this.workspacePermissionsCacheStorageService.getRolesPermissions( + if (roleIds) { + currentRolesPermissions = + await this.workspacePermissionsCacheStorageService.getRolesPermissions( + workspaceId, + ); + } + + const recomputedRolesPermissions = + await this.getObjectRecordPermissionsForRoles({ workspaceId, - ); - } + isPermissionsV2Enabled, + roleIds, + }); - const recomputedRolesPermissions = - await this.getObjectRecordPermissionsForRoles({ + const freshObjectRecordsPermissionsByRoleId = roleIds + ? { ...currentRolesPermissions, ...recomputedRolesPermissions } + : recomputedRolesPermissions; + + await this.workspacePermissionsCacheStorageService.setRolesPermissions( workspaceId, - isPermissionsV2Enabled, - roleIds, - }); - - const freshObjectRecordsPermissionsByRoleId = roleIds - ? { ...currentRolesPermissions, ...recomputedRolesPermissions } - : recomputedRolesPermissions; - - await this.workspacePermissionsCacheStorageService.setRolesPermissions( - workspaceId, - freshObjectRecordsPermissionsByRoleId, - ); - - await this.workspacePermissionsCacheStorageService.removeRolesPermissionsOngoingCachingLock( - workspaceId, - ); + freshObjectRecordsPermissionsByRoleId, + ); + } finally { + await this.workspacePermissionsCacheStorageService.removeRolesPermissionsOngoingCachingLock( + workspaceId, + ); + } } async recomputeUserWorkspaceRoleMapCache({ @@ -121,19 +122,21 @@ export class WorkspacePermissionsCacheService { workspaceId, ); - const freshUserWorkspaceRoleMap = - await this.getUserWorkspaceRoleMapFromDatabase({ + try { + const freshUserWorkspaceRoleMap = + await this.getUserWorkspaceRoleMapFromDatabase({ + workspaceId, + }); + + await this.workspacePermissionsCacheStorageService.setUserWorkspaceRoleMap( workspaceId, - }); - - await this.workspacePermissionsCacheStorageService.setUserWorkspaceRoleMap( - workspaceId, - freshUserWorkspaceRoleMap, - ); - - await this.workspacePermissionsCacheStorageService.removeUserWorkspaceRoleMapOngoingCachingLock( - workspaceId, - ); + freshUserWorkspaceRoleMap, + ); + } finally { + await this.workspacePermissionsCacheStorageService.removeUserWorkspaceRoleMapOngoingCachingLock( + workspaceId, + ); + } } async getRolesPermissionsFromCache({ diff --git a/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts b/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts index 774187cff..876a02d86 100644 --- a/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts +++ b/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts @@ -223,10 +223,11 @@ export class WorkspaceDatasourceFactory { this.workspacePermissionsCacheStorageService.getRolesPermissionsVersion( workspaceId, ), - recomputeCache: (params) => - this.workspacePermissionsCacheService.recomputeRolesPermissionsCache( - params, - ), + recomputeCache: () => + this.workspacePermissionsCacheService.recomputeRolesPermissionsCache({ + workspaceId, + ignoreLock: true, + }), cachedEntityName: 'Roles permissions', exceptionCode: TwentyORMExceptionCode.ROLES_PERMISSIONS_VERSION_NOT_FOUND, });