mirror of
https://github.com/bitwarden/browser.git
synced 2025-01-30 22:41:33 +01:00
[PM-17213] - allow changing of item owner from personal to org (#13034)
* allow changing of item owner from personal to org * avoid unecessary api calls when updating item parent * move comment up a line * add localData to cipher instance
This commit is contained in:
parent
382a2a0f24
commit
dbb1639e72
@ -93,7 +93,7 @@ export abstract class CipherService implements UserKeyRotationDataProvider<Ciphe
|
||||
organizationId: string,
|
||||
collectionIds: string[],
|
||||
userId: UserId,
|
||||
) => Promise<any>;
|
||||
) => Promise<Cipher>;
|
||||
shareManyWithServer: (
|
||||
ciphers: CipherView[],
|
||||
organizationId: string,
|
||||
|
@ -786,7 +786,7 @@ export class CipherService implements CipherServiceAbstraction {
|
||||
organizationId: string,
|
||||
collectionIds: string[],
|
||||
userId: UserId,
|
||||
): Promise<any> {
|
||||
): Promise<Cipher> {
|
||||
const attachmentPromises: Promise<any>[] = [];
|
||||
if (cipher.attachments != null) {
|
||||
cipher.attachments.forEach((attachment) => {
|
||||
@ -806,6 +806,7 @@ export class CipherService implements CipherServiceAbstraction {
|
||||
const response = await this.apiService.putShareCipher(cipher.id, request);
|
||||
const data = new CipherData(response, collectionIds);
|
||||
await this.upsert(data);
|
||||
return new Cipher(data, cipher.localData);
|
||||
}
|
||||
|
||||
async shareManyWithServer(
|
||||
|
@ -157,8 +157,11 @@ describe("ItemDetailsSectionComponent", () => {
|
||||
});
|
||||
|
||||
describe("allowOwnershipChange", () => {
|
||||
it("should not allow ownership change in edit mode", () => {
|
||||
it("should not allow ownership change if in edit mode and the cipher is owned by an organization", () => {
|
||||
component.config.mode = "edit";
|
||||
component.originalCipherView = {
|
||||
organizationId: "org1",
|
||||
} as CipherView;
|
||||
expect(component.allowOwnershipChange).toBe(false);
|
||||
});
|
||||
|
||||
@ -195,6 +198,7 @@ describe("ItemDetailsSectionComponent", () => {
|
||||
it("should show personal ownership when the configuration allows", () => {
|
||||
component.config.mode = "edit";
|
||||
component.config.allowPersonalOwnership = true;
|
||||
component.originalCipherView = {} as CipherView;
|
||||
component.config.organizations = [{ id: "134-433-22" } as Organization];
|
||||
fixture.detectChanges();
|
||||
|
||||
@ -208,6 +212,7 @@ describe("ItemDetailsSectionComponent", () => {
|
||||
it("should show personal ownership when the control is disabled", async () => {
|
||||
component.config.mode = "edit";
|
||||
component.config.allowPersonalOwnership = false;
|
||||
component.originalCipherView = {} as CipherView;
|
||||
component.config.organizations = [{ id: "134-433-22" } as Organization];
|
||||
await component.ngOnInit();
|
||||
fixture.detectChanges();
|
||||
|
@ -150,8 +150,8 @@ export class ItemDetailsSectionComponent implements OnInit {
|
||||
}
|
||||
|
||||
get allowOwnershipChange() {
|
||||
// Do not allow ownership change in edit mode.
|
||||
if (this.config.mode === "edit") {
|
||||
// Do not allow ownership change in edit mode and the cipher is owned by an organization
|
||||
if (this.config.mode === "edit" && this.originalCipherView.organizationId != null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -63,8 +63,16 @@ export class DefaultCipherFormService implements CipherFormService {
|
||||
const originalCollectionIds = new Set(config.originalCipher.collectionIds ?? []);
|
||||
const newCollectionIds = new Set(cipher.collectionIds ?? []);
|
||||
|
||||
// If the collectionIds are the same, update the cipher normally
|
||||
if (isSetEqual(originalCollectionIds, newCollectionIds)) {
|
||||
// Call shareWithServer if the owner is changing from a user to an organization
|
||||
if (config.originalCipher.organizationId === null && cipher.organizationId != null) {
|
||||
savedCipher = await this.cipherService.shareWithServer(
|
||||
cipher,
|
||||
cipher.organizationId,
|
||||
cipher.collectionIds,
|
||||
activeUserId,
|
||||
);
|
||||
// If the collectionIds are the same, update the cipher normally
|
||||
} else if (isSetEqual(originalCollectionIds, newCollectionIds)) {
|
||||
savedCipher = await this.cipherService.updateWithServer(encryptedCipher, config.admin);
|
||||
} else {
|
||||
// Updating a cipher with collection changes is not supported with a single request currently
|
||||
|
Loading…
Reference in New Issue
Block a user