From f0c25a69960c7f913d082b1d1edbb3af583c6e99 Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Thu, 23 Nov 2023 14:04:42 +1000 Subject: [PATCH] Override deprecated values on sync --- .../src/services/jslib-services.module.ts | 2 +- .../models/domain/organization.ts | 15 +++++++++++++++ .../organization/organization.service.ts | 19 ++++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 1cbb1526182..dbb5b2b3435 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -616,7 +616,7 @@ import { AbstractThemingService } from "./theming/theming.service.abstraction"; { provide: OrganizationServiceAbstraction, useClass: OrganizationService, - deps: [StateServiceAbstraction], + deps: [StateServiceAbstraction, ConfigServiceAbstraction], }, { provide: InternalOrganizationServiceAbstraction, diff --git a/libs/common/src/admin-console/models/domain/organization.ts b/libs/common/src/admin-console/models/domain/organization.ts index c7d8ee49243..f6dd255a75e 100644 --- a/libs/common/src/admin-console/models/domain/organization.ts +++ b/libs/common/src/admin-console/models/domain/organization.ts @@ -184,14 +184,29 @@ export class Organization { return this.canEditAnyCollection || this.canDeleteAnyCollection; } + /** + * @deprecated + * This is deprecated with the introduction of Flexible Collections. + * This will always return false if FlexibleCollections flag is on. + */ get canEditAssignedCollections() { return this.isManager || this.permissions.editAssignedCollections; } + /** + * @deprecated + * This is deprecated with the introduction of Flexible Collections. + * This will always return false if FlexibleCollections flag is on. + */ get canDeleteAssignedCollections() { return this.isManager || this.permissions.deleteAssignedCollections; } + /** + * @deprecated + * This is deprecated with the introduction of Flexible Collections. + * This will always return false if FlexibleCollections flag is on. + */ get canViewAssignedCollections() { return this.canDeleteAssignedCollections || this.canEditAssignedCollections; } diff --git a/libs/common/src/admin-console/services/organization/organization.service.ts b/libs/common/src/admin-console/services/organization/organization.service.ts index c8641b41f25..5a486827394 100644 --- a/libs/common/src/admin-console/services/organization/organization.service.ts +++ b/libs/common/src/admin-console/services/organization/organization.service.ts @@ -1,10 +1,13 @@ import { BehaviorSubject, concatMap, map, Observable } from "rxjs"; +import { FeatureFlag } from "../../../enums/feature-flag.enum"; +import { ConfigServiceAbstraction } from "../../../platform/abstractions/config/config.service.abstraction"; import { StateService } from "../../../platform/abstractions/state.service"; import { InternalOrganizationServiceAbstraction, isMember, } from "../../abstractions/organization/organization.service.abstraction"; +import { OrganizationUserType } from "../../enums"; import { OrganizationData } from "../../models/data/organization.data"; import { Organization } from "../../models/domain/organization"; @@ -14,7 +17,7 @@ export class OrganizationService implements InternalOrganizationServiceAbstracti organizations$ = this._organizations.asObservable(); memberOrganizations$ = this.organizations$.pipe(map((orgs) => orgs.filter(isMember))); - constructor(private stateService: StateService) { + constructor(private stateService: StateService, private configService: ConfigServiceAbstraction) { this.stateService.activeAccountUnlocked$ .pipe( concatMap(async (unlocked) => { @@ -103,6 +106,20 @@ export class OrganizationService implements InternalOrganizationServiceAbstracti } async replace(organizations: { [id: string]: OrganizationData }) { + // 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.stateService.setOrganizations(organizations); this.updateObservables(organizations); }