1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-11 13:53:34 +00:00

Remove LimitCollectionCreationDeletionSplit feature flag (#11258)

* Remove references to feature flag

* Remove feature flag enum
This commit is contained in:
Addison Beck
2024-11-21 22:58:21 -05:00
committed by GitHub
parent 9e9f977eb3
commit e6c68b7138
10 changed files with 21 additions and 108 deletions

View File

@@ -52,11 +52,7 @@
<form <form
*ngIf="org && !loading" *ngIf="org && !loading"
[bitSubmit]="submitCollectionManagement" [bitSubmit]="submitCollectionManagement"
[formGroup]=" [formGroup]="collectionManagementFormGroup"
limitCollectionCreationDeletionSplitFeatureFlagIsEnabled
? collectionManagementFormGroup_VNext
: collectionManagementFormGroup
"
> >
<h1 bitTypography="h1" class="tw-mt-16 tw-pb-2.5">{{ "collectionManagement" | i18n }}</h1> <h1 bitTypography="h1" class="tw-mt-16 tw-pb-2.5">{{ "collectionManagement" | i18n }}</h1>
<p bitTypography="body1">{{ "collectionManagementDesc" | i18n }}</p> <p bitTypography="body1">{{ "collectionManagementDesc" | i18n }}</p>
@@ -64,24 +60,15 @@
<bit-label>{{ "allowAdminAccessToAllCollectionItemsDesc" | i18n }}</bit-label> <bit-label>{{ "allowAdminAccessToAllCollectionItemsDesc" | i18n }}</bit-label>
<input type="checkbox" bitCheckbox formControlName="allowAdminAccessToAllCollectionItems" /> <input type="checkbox" bitCheckbox formControlName="allowAdminAccessToAllCollectionItems" />
</bit-form-control> </bit-form-control>
<ng-container *ngIf="limitCollectionCreationDeletionSplitFeatureFlagIsEnabled"> <bit-form-control>
<bit-form-control> <bit-label>{{ "limitCollectionCreationDesc" | i18n }}</bit-label>
<bit-label>{{ "limitCollectionCreationDesc" | i18n }}</bit-label> <input type="checkbox" bitCheckbox formControlName="limitCollectionCreation" />
<input type="checkbox" bitCheckbox formControlName="limitCollectionCreation" /> </bit-form-control>
</bit-form-control> <bit-form-control>
<bit-form-control> <bit-label>{{ "limitCollectionDeletionDesc" | i18n }}</bit-label>
<bit-label>{{ "limitCollectionDeletionDesc" | i18n }}</bit-label> <input type="checkbox" bitCheckbox formControlName="limitCollectionDeletion" />
<input type="checkbox" bitCheckbox formControlName="limitCollectionDeletion" /> </bit-form-control>
</bit-form-control>
</ng-container>
<ng-container *ngIf="!limitCollectionCreationDeletionSplitFeatureFlagIsEnabled">
<bit-form-control>
<bit-label>{{ "limitCollectionCreationDeletionDesc" | i18n }}</bit-label>
<input type="checkbox" bitCheckbox formControlName="limitCollectionCreationDeletion" />
</bit-form-control>
</ng-container>
<button <button
*ngIf="!selfHosted || limitCollectionCreationDeletionSplitFeatureFlagIsEnabled"
type="submit" type="submit"
bitButton bitButton
bitFormButton bitFormButton

View File

@@ -10,7 +10,6 @@ import { OrganizationCollectionManagementUpdateRequest } from "@bitwarden/common
import { OrganizationKeysRequest } from "@bitwarden/common/admin-console/models/request/organization-keys.request"; import { OrganizationKeysRequest } from "@bitwarden/common/admin-console/models/request/organization-keys.request";
import { OrganizationUpdateRequest } from "@bitwarden/common/admin-console/models/request/organization-update.request"; import { OrganizationUpdateRequest } from "@bitwarden/common/admin-console/models/request/organization-update.request";
import { OrganizationResponse } from "@bitwarden/common/admin-console/models/response/organization.response"; import { OrganizationResponse } from "@bitwarden/common/admin-console/models/response/organization.response";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -40,8 +39,6 @@ export class AccountComponent implements OnInit, OnDestroy {
org: OrganizationResponse; org: OrganizationResponse;
taxFormPromise: Promise<unknown>; taxFormPromise: Promise<unknown>;
limitCollectionCreationDeletionSplitFeatureFlagIsEnabled: boolean;
// FormGroup validators taken from server Organization domain object // FormGroup validators taken from server Organization domain object
protected formGroup = this.formBuilder.group({ protected formGroup = this.formBuilder.group({
orgName: this.formBuilder.control( orgName: this.formBuilder.control(
@@ -57,16 +54,7 @@ export class AccountComponent implements OnInit, OnDestroy {
), ),
}); });
// Deprecated. Delete with https://bitwarden.atlassian.net/browse/PM-10863
protected collectionManagementFormGroup = this.formBuilder.group({ protected collectionManagementFormGroup = this.formBuilder.group({
limitCollectionCreationDeletion: this.formBuilder.control({ value: false, disabled: true }),
allowAdminAccessToAllCollectionItems: this.formBuilder.control({
value: false,
disabled: true,
}),
});
protected collectionManagementFormGroup_VNext = this.formBuilder.group({
limitCollectionCreation: this.formBuilder.control({ value: false, disabled: false }), limitCollectionCreation: this.formBuilder.control({ value: false, disabled: false }),
limitCollectionDeletion: this.formBuilder.control({ value: false, disabled: false }), limitCollectionDeletion: this.formBuilder.control({ value: false, disabled: false }),
allowAdminAccessToAllCollectionItems: this.formBuilder.control({ allowAdminAccessToAllCollectionItems: this.formBuilder.control({
@@ -98,11 +86,6 @@ export class AccountComponent implements OnInit, OnDestroy {
async ngOnInit() { async ngOnInit() {
this.selfHosted = this.platformUtilsService.isSelfHost(); this.selfHosted = this.platformUtilsService.isSelfHost();
this.configService
.getFeatureFlag$(FeatureFlag.LimitCollectionCreationDeletionSplit)
.pipe(takeUntil(this.destroy$))
.subscribe((x) => (this.limitCollectionCreationDeletionSplitFeatureFlagIsEnabled = x));
this.route.params this.route.params
.pipe( .pipe(
switchMap((params) => this.organizationService.get$(params.organizationId)), switchMap((params) => this.organizationService.get$(params.organizationId)),
@@ -123,16 +106,6 @@ export class AccountComponent implements OnInit, OnDestroy {
this.canEditSubscription = organization.canEditSubscription; this.canEditSubscription = organization.canEditSubscription;
this.canUseApi = organization.useApi; this.canUseApi = organization.useApi;
// Disabling these fields for self hosted orgs is deprecated
// This block can be completely removed as part of
// https://bitwarden.atlassian.net/browse/PM-10863
if (!this.limitCollectionCreationDeletionSplitFeatureFlagIsEnabled) {
if (!this.selfHosted) {
this.collectionManagementFormGroup.get("limitCollectionCreationDeletion").enable();
this.collectionManagementFormGroup.get("allowAdminAccessToAllCollectionItems").enable();
}
}
// Update disabled states - reactive forms prefers not using disabled attribute // Update disabled states - reactive forms prefers not using disabled attribute
if (!this.selfHosted) { if (!this.selfHosted) {
this.formGroup.get("orgName").enable(); this.formGroup.get("orgName").enable();
@@ -152,18 +125,11 @@ export class AccountComponent implements OnInit, OnDestroy {
orgName: this.org.name, orgName: this.org.name,
billingEmail: this.org.billingEmail, billingEmail: this.org.billingEmail,
}); });
if (this.limitCollectionCreationDeletionSplitFeatureFlagIsEnabled) { this.collectionManagementFormGroup.patchValue({
this.collectionManagementFormGroup_VNext.patchValue({ limitCollectionCreation: this.org.limitCollectionCreation,
limitCollectionCreation: this.org.limitCollectionCreation, limitCollectionDeletion: this.org.limitCollectionDeletion,
limitCollectionDeletion: this.org.limitCollectionDeletion, allowAdminAccessToAllCollectionItems: this.org.allowAdminAccessToAllCollectionItems,
allowAdminAccessToAllCollectionItems: this.org.allowAdminAccessToAllCollectionItems, });
});
} else {
this.collectionManagementFormGroup.patchValue({
limitCollectionCreationDeletion: this.org.limitCollectionCreationDeletion,
allowAdminAccessToAllCollectionItems: this.org.allowAdminAccessToAllCollectionItems,
});
}
this.loading = false; this.loading = false;
}); });
@@ -211,24 +177,13 @@ export class AccountComponent implements OnInit, OnDestroy {
}; };
submitCollectionManagement = async () => { submitCollectionManagement = async () => {
// Early exit if self-hosted
if (this.selfHosted && !this.limitCollectionCreationDeletionSplitFeatureFlagIsEnabled) {
return;
}
const request = new OrganizationCollectionManagementUpdateRequest(); const request = new OrganizationCollectionManagementUpdateRequest();
if (this.limitCollectionCreationDeletionSplitFeatureFlagIsEnabled) { request.limitCollectionCreation =
request.limitCollectionCreation = this.collectionManagementFormGroup.value.limitCollectionCreation;
this.collectionManagementFormGroup_VNext.value.limitCollectionCreation; request.limitCollectionDeletion =
request.limitCollectionDeletion = this.collectionManagementFormGroup.value.limitCollectionDeletion;
this.collectionManagementFormGroup_VNext.value.limitCollectionDeletion; request.allowAdminAccessToAllCollectionItems =
request.allowAdminAccessToAllCollectionItems = this.collectionManagementFormGroup.value.allowAdminAccessToAllCollectionItems;
this.collectionManagementFormGroup_VNext.value.allowAdminAccessToAllCollectionItems;
} else {
request.limitCreateDeleteOwnerAdmin =
this.collectionManagementFormGroup.value.limitCollectionCreationDeletion;
request.allowAdminAccessToAllCollectionItems =
this.collectionManagementFormGroup.value.allowAdminAccessToAllCollectionItems;
}
await this.organizationApiService.updateCollectionManagement(this.organizationId, request); await this.organizationApiService.updateCollectionManagement(this.organizationId, request);

View File

@@ -8390,9 +8390,6 @@
"collectionManagementDesc": { "collectionManagementDesc": {
"message": "Manage the collection behavior for the organization" "message": "Manage the collection behavior for the organization"
}, },
"limitCollectionCreationDeletionDesc": {
"message": "Limit collection creation and deletion to owners and admins"
},
"limitCollectionCreationDesc": { "limitCollectionCreationDesc": {
"message": "Limit collection creation to owners and admins" "message": "Limit collection creation to owners and admins"
}, },

View File

@@ -53,8 +53,6 @@ describe("ORGANIZATIONS state", () => {
accessSecretsManager: false, accessSecretsManager: false,
limitCollectionCreation: false, limitCollectionCreation: false,
limitCollectionDeletion: false, limitCollectionDeletion: false,
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
limitCollectionCreationDeletion: false,
allowAdminAccessToAllCollectionItems: false, allowAdminAccessToAllCollectionItems: false,
familySponsorshipLastSyncDate: new Date(), familySponsorshipLastSyncDate: new Date(),
userIsManagedByOrganization: false, userIsManagedByOrganization: false,

View File

@@ -54,8 +54,6 @@ export class OrganizationData {
accessSecretsManager: boolean; accessSecretsManager: boolean;
limitCollectionCreation: boolean; limitCollectionCreation: boolean;
limitCollectionDeletion: boolean; limitCollectionDeletion: boolean;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
limitCollectionCreationDeletion: boolean;
allowAdminAccessToAllCollectionItems: boolean; allowAdminAccessToAllCollectionItems: boolean;
userIsManagedByOrganization: boolean; userIsManagedByOrganization: boolean;
@@ -116,8 +114,6 @@ export class OrganizationData {
this.accessSecretsManager = response.accessSecretsManager; this.accessSecretsManager = response.accessSecretsManager;
this.limitCollectionCreation = response.limitCollectionCreation; this.limitCollectionCreation = response.limitCollectionCreation;
this.limitCollectionDeletion = response.limitCollectionDeletion; this.limitCollectionDeletion = response.limitCollectionDeletion;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
this.limitCollectionCreationDeletion = response.limitCollectionCreationDeletion;
this.allowAdminAccessToAllCollectionItems = response.allowAdminAccessToAllCollectionItems; this.allowAdminAccessToAllCollectionItems = response.allowAdminAccessToAllCollectionItems;
this.userIsManagedByOrganization = response.userIsManagedByOrganization; this.userIsManagedByOrganization = response.userIsManagedByOrganization;

View File

@@ -70,8 +70,6 @@ export class Organization {
*/ */
limitCollectionCreation: boolean; limitCollectionCreation: boolean;
limitCollectionDeletion: boolean; limitCollectionDeletion: boolean;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
limitCollectionCreationDeletion: boolean;
/** /**
* Refers to the ability for an owner/admin to access all collection items, regardless of assigned collections * Refers to the ability for an owner/admin to access all collection items, regardless of assigned collections
@@ -137,8 +135,6 @@ export class Organization {
this.accessSecretsManager = obj.accessSecretsManager; this.accessSecretsManager = obj.accessSecretsManager;
this.limitCollectionCreation = obj.limitCollectionCreation; this.limitCollectionCreation = obj.limitCollectionCreation;
this.limitCollectionDeletion = obj.limitCollectionDeletion; this.limitCollectionDeletion = obj.limitCollectionDeletion;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
this.limitCollectionCreationDeletion = obj.limitCollectionCreationDeletion;
this.allowAdminAccessToAllCollectionItems = obj.allowAdminAccessToAllCollectionItems; this.allowAdminAccessToAllCollectionItems = obj.allowAdminAccessToAllCollectionItems;
this.userIsManagedByOrganization = obj.userIsManagedByOrganization; this.userIsManagedByOrganization = obj.userIsManagedByOrganization;
} }
@@ -241,7 +237,7 @@ export class Organization {
return true; return true;
} }
// If AllowAdminAccessToAllCollectionItems is true, Owners and Admins can delete any collection, regardless of LimitCollectionCreationDeletion setting // If AllowAdminAccessToAllCollectionItems is true, Owners and Admins can delete any collection, regardless of LimitCollectionDeletion setting
// Using explicit type checks because provider users are handled above and this mimics the server's permission checks closely // Using explicit type checks because provider users are handled above and this mimics the server's permission checks closely
if (this.allowAdminAccessToAllCollectionItems) { if (this.allowAdminAccessToAllCollectionItems) {
return this.type == OrganizationUserType.Owner || this.type == OrganizationUserType.Admin; return this.type == OrganizationUserType.Owner || this.type == OrganizationUserType.Admin;

View File

@@ -1,7 +1,5 @@
export class OrganizationCollectionManagementUpdateRequest { export class OrganizationCollectionManagementUpdateRequest {
limitCollectionCreation: boolean; limitCollectionCreation: boolean;
limitCollectionDeletion: boolean; limitCollectionDeletion: boolean;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
limitCreateDeleteOwnerAdmin: boolean;
allowAdminAccessToAllCollectionItems: boolean; allowAdminAccessToAllCollectionItems: boolean;
} }

View File

@@ -34,8 +34,6 @@ export class OrganizationResponse extends BaseResponse {
maxAutoscaleSmServiceAccounts?: number; maxAutoscaleSmServiceAccounts?: number;
limitCollectionCreation: boolean; limitCollectionCreation: boolean;
limitCollectionDeletion: boolean; limitCollectionDeletion: boolean;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
limitCollectionCreationDeletion: boolean;
allowAdminAccessToAllCollectionItems: boolean; allowAdminAccessToAllCollectionItems: boolean;
constructor(response: any) { constructor(response: any) {
@@ -74,10 +72,6 @@ export class OrganizationResponse extends BaseResponse {
this.maxAutoscaleSmServiceAccounts = this.getResponseProperty("MaxAutoscaleSmServiceAccounts"); this.maxAutoscaleSmServiceAccounts = this.getResponseProperty("MaxAutoscaleSmServiceAccounts");
this.limitCollectionCreation = this.getResponseProperty("LimitCollectionCreation"); this.limitCollectionCreation = this.getResponseProperty("LimitCollectionCreation");
this.limitCollectionDeletion = this.getResponseProperty("LimitCollectionDeletion"); this.limitCollectionDeletion = this.getResponseProperty("LimitCollectionDeletion");
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
this.limitCollectionCreationDeletion = this.getResponseProperty(
"LimitCollectionCreationDeletion",
);
this.allowAdminAccessToAllCollectionItems = this.getResponseProperty( this.allowAdminAccessToAllCollectionItems = this.getResponseProperty(
"AllowAdminAccessToAllCollectionItems", "AllowAdminAccessToAllCollectionItems",
); );

View File

@@ -51,8 +51,6 @@ export class ProfileOrganizationResponse extends BaseResponse {
accessSecretsManager: boolean; accessSecretsManager: boolean;
limitCollectionCreation: boolean; limitCollectionCreation: boolean;
limitCollectionDeletion: boolean; limitCollectionDeletion: boolean;
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
limitCollectionCreationDeletion: boolean;
allowAdminAccessToAllCollectionItems: boolean; allowAdminAccessToAllCollectionItems: boolean;
userIsManagedByOrganization: boolean; userIsManagedByOrganization: boolean;
@@ -115,10 +113,6 @@ export class ProfileOrganizationResponse extends BaseResponse {
this.accessSecretsManager = this.getResponseProperty("AccessSecretsManager"); this.accessSecretsManager = this.getResponseProperty("AccessSecretsManager");
this.limitCollectionCreation = this.getResponseProperty("LimitCollectionCreation"); this.limitCollectionCreation = this.getResponseProperty("LimitCollectionCreation");
this.limitCollectionDeletion = this.getResponseProperty("LimitCollectionDeletion"); this.limitCollectionDeletion = this.getResponseProperty("LimitCollectionDeletion");
// Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
this.limitCollectionCreationDeletion = this.getResponseProperty(
"LimitCollectionCreationDeletion",
);
this.allowAdminAccessToAllCollectionItems = this.getResponseProperty( this.allowAdminAccessToAllCollectionItems = this.getResponseProperty(
"AllowAdminAccessToAllCollectionItems", "AllowAdminAccessToAllCollectionItems",
); );

View File

@@ -33,7 +33,6 @@ export enum FeatureFlag {
PM11901_RefactorSelfHostingLicenseUploader = "PM-11901-refactor-self-hosting-license-uploader", PM11901_RefactorSelfHostingLicenseUploader = "PM-11901-refactor-self-hosting-license-uploader",
AccessIntelligence = "pm-13227-access-intelligence", AccessIntelligence = "pm-13227-access-intelligence",
Pm13322AddPolicyDefinitions = "pm-13322-add-policy-definitions", Pm13322AddPolicyDefinitions = "pm-13322-add-policy-definitions",
LimitCollectionCreationDeletionSplit = "pm-10863-limit-collection-creation-deletion-split",
CriticalApps = "pm-14466-risk-insights-critical-application", CriticalApps = "pm-14466-risk-insights-critical-application",
TrialPaymentOptional = "PM-8163-trial-payment", TrialPaymentOptional = "PM-8163-trial-payment",
SecurityTasks = "security-tasks", SecurityTasks = "security-tasks",
@@ -84,7 +83,6 @@ export const DefaultFeatureFlagValue = {
[FeatureFlag.PM11901_RefactorSelfHostingLicenseUploader]: FALSE, [FeatureFlag.PM11901_RefactorSelfHostingLicenseUploader]: FALSE,
[FeatureFlag.AccessIntelligence]: FALSE, [FeatureFlag.AccessIntelligence]: FALSE,
[FeatureFlag.Pm13322AddPolicyDefinitions]: FALSE, [FeatureFlag.Pm13322AddPolicyDefinitions]: FALSE,
[FeatureFlag.LimitCollectionCreationDeletionSplit]: FALSE,
[FeatureFlag.CriticalApps]: FALSE, [FeatureFlag.CriticalApps]: FALSE,
[FeatureFlag.TrialPaymentOptional]: FALSE, [FeatureFlag.TrialPaymentOptional]: FALSE,
[FeatureFlag.SecurityTasks]: FALSE, [FeatureFlag.SecurityTasks]: FALSE,