diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index bb61bb64658..ccdd263745a 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -536,6 +536,7 @@ export default class MainBackground { this.folderApiService, this.organizationService, this.sendApiService, + this.configService, logoutCallback ); this.eventUploadService = new EventUploadService( diff --git a/apps/cli/src/bw.ts b/apps/cli/src/bw.ts index ceed0f28659..dab6f421a31 100644 --- a/apps/cli/src/bw.ts +++ b/apps/cli/src/bw.ts @@ -443,6 +443,7 @@ export class Main { this.folderApiService, this.organizationService, this.sendApiService, + this.configService, async (expired: boolean) => await this.logout() ); diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 97d8099b955..e841fd5c97d 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -450,6 +450,7 @@ import { ModalService } from "./modal.service"; FolderApiServiceAbstraction, OrganizationServiceAbstraction, SendApiServiceAbstraction, + ConfigServiceAbstraction, LOGOUT_CALLBACK, ], }, diff --git a/libs/common/src/vault/services/sync/sync.service.ts b/libs/common/src/vault/services/sync/sync.service.ts index 7368d82f731..e995ffe4587 100644 --- a/libs/common/src/vault/services/sync/sync.service.ts +++ b/libs/common/src/vault/services/sync/sync.service.ts @@ -10,6 +10,7 @@ import { ProviderData } from "../../../admin-console/models/data/provider.data"; import { PolicyResponse } from "../../../admin-console/models/response/policy.response"; import { KeyConnectorService } from "../../../auth/abstractions/key-connector.service"; import { ForceSetPasswordReason } from "../../../auth/models/domain/force-set-password-reason"; +import { FeatureFlag } from "../../../enums/feature-flag.enum"; import { DomainsResponse } from "../../../models/response/domains.response"; import { SyncCipherNotification, @@ -17,6 +18,7 @@ import { SyncSendNotification, } from "../../../models/response/notification.response"; import { ProfileResponse } from "../../../models/response/profile.response"; +import { ConfigServiceAbstraction } from "../../../platform/abstractions/config/config.service.abstraction"; import { CryptoService } from "../../../platform/abstractions/crypto.service"; import { LogService } from "../../../platform/abstractions/log.service"; import { MessagingService } from "../../../platform/abstractions/messaging.service"; @@ -59,6 +61,7 @@ export class SyncService implements SyncServiceAbstraction { private folderApiService: FolderApiServiceAbstraction, private organizationService: InternalOrganizationServiceAbstraction, private sendApiService: SendApiService, + private configService: ConfigServiceAbstraction, private logoutCallback: (expired: boolean) => Promise ) {} @@ -394,6 +397,20 @@ export class SyncService implements SyncServiceAbstraction { } }); + // If Flexible Collections is enabled, treat Managers as Users and ignore deprecated permissions + if (await this.configService.getFeatureFlag(FeatureFlag.FlexibleCollections)) { + Object.values(organizations).forEach((o) => { + if (o.type === OrganizationUserType.Manager) { + o.type = OrganizationUserType.User; + } + + if (o.permissions != null) { + o.permissions.editAssignedCollections = false; + o.permissions.deleteAssignedCollections = false; + } + }); + } + await this.organizationService.replace(organizations); }