diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index fedbf43391c..6b0823fb4cb 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -622,7 +622,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 87fcb77cad6..f6dd255a75e 100644 --- a/libs/common/src/admin-console/models/domain/organization.ts +++ b/libs/common/src/admin-console/models/domain/organization.ts @@ -187,6 +187,7 @@ export class Organization { /** * @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; @@ -195,6 +196,7 @@ export class Organization { /** * @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; @@ -203,6 +205,7 @@ export class Organization { /** * @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); }