mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00: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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user