Skip to content

Commit

Permalink
[PM-11203] Hide collection/item checkboxes in Admin Console (#10970)
Browse files Browse the repository at this point in the history
* [PM-11203] Hide collection/item checkboxes in AC when a user does not have manage/edit permissions for the collection/item

* [PM-11203] Remove restrict-provider-access flag

* [PM-11203] Adjust the editableItems array to use existing canEdit and canDelete helpers to determine eligibility
  • Loading branch information
shane-melton authored Oct 14, 2024
1 parent 0377775 commit a884fcf
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<td bitCell [ngClass]="RowHeightClass" class="tw-min-w-fit">
<input
*ngIf="showCheckbox"
type="checkbox"
bitCheckbox
appStopProp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export class VaultCipherRowComponent implements OnInit {
@Output() checkedToggled = new EventEmitter<void>();

protected CipherType = CipherType;
protected organization?: Organization;

constructor(private configService: ConfigService) {}

Expand All @@ -53,6 +54,9 @@ export class VaultCipherRowComponent implements OnInit {
this.extensionRefreshEnabled = await firstValueFrom(
this.configService.getFeatureFlag$(FeatureFlag.ExtensionRefresh),
);
if (this.cipher.organizationId != null) {
this.organization = this.organizations.find((o) => o.id === this.cipher.organizationId);
}
}

protected get showTotpCopyButton() {
Expand Down Expand Up @@ -138,4 +142,12 @@ export class VaultCipherRowComponent implements OnInit {
protected assignToCollections() {
this.onEvent.emit({ type: "assignToCollections", items: [this.cipher] });
}

protected get showCheckbox() {
if (!this.viewingOrgVault || !this.organization) {
return true; // Always show checkbox in individual vault or for non-org items
}

return this.organization.canEditAllCiphers || this.cipher.edit;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ export class VaultCollectionRowComponent {
}

protected get showCheckbox() {
return this.collection?.id !== Unassigned;
if (this.collection?.id === Unassigned) {
return false; // Never show checkbox for Unassigned
}

return this.canEditCollection || this.canDeleteCollection;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { SelectionModel } from "@angular/cdk/collections";
import { Component, EventEmitter, Input, Output } from "@angular/core";

import { Unassigned, CollectionView } from "@bitwarden/admin-console/common";
import { CollectionView, Unassigned } from "@bitwarden/admin-console/common";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { TableDataSource } from "@bitwarden/components";
Expand Down Expand Up @@ -205,11 +205,12 @@ export class VaultItemsComponent {

this.selection.clear();

// Every item except for the Unassigned collection is selectable, individual bulk actions check the user's permission
// All ciphers are selectable, collections only if they can be edited or deleted
this.editableItems = items.filter(
(item) =>
item.cipher !== undefined ||
(item.collection !== undefined && item.collection.id !== Unassigned),
(item.collection !== undefined &&
(this.canEditCollection(item.collection) || this.canDeleteCollection(item.collection))),
);

this.dataSource.data = items;
Expand Down

0 comments on commit a884fcf

Please sign in to comment.