diff --git a/src/core/server/workspaces/saved_objects/workspace_saved_objects_client_wrapper.ts b/src/core/server/workspaces/saved_objects/workspace_saved_objects_client_wrapper.ts index 25c3aa157d9f..9572c89b1ece 100644 --- a/src/core/server/workspaces/saved_objects/workspace_saved_objects_client_wrapper.ts +++ b/src/core/server/workspaces/saved_objects/workspace_saved_objects_client_wrapper.ts @@ -17,6 +17,9 @@ import { SavedObjectsCreateOptions, SavedObjectsDeleteOptions, SavedObjectsFindOptions, + SavedObjectsUpdateOptions, + SavedObjectsBulkUpdateOptions, + SavedObjectsBulkUpdateObject, } from 'opensearch-dashboards/server'; import { WorkspacePermissionControl, @@ -167,6 +170,39 @@ export class WorkspaceSavedObjectsClientWrapper { return await wrapperOptions.client.find(options); }; + const updateWithWorkspacePermissionControl = async ( + type: string, + id: string, + attributes: T, + options?: SavedObjectsUpdateOptions + ) => { + if (isWorkspacesLikeAttributes(attributes)) { + await this.validateMultiWorkspacesPermissions( + attributes.workspaces, + wrapperOptions.request, + WorkspacePermissionMode.Admin + ); + } + return await wrapperOptions.client.update(type, id, attributes, options); + }; + + const bulkUpdateWithWorkspacePermissionControl = async ( + objects: Array>, + options: SavedObjectsBulkUpdateOptions = {} + ) => { + const objectToBulkUpdate = await wrapperOptions.client.bulkGet(objects, options); + for (const object of objectToBulkUpdate.saved_objects) { + if (isWorkspacesLikeAttributes(object.attributes)) { + await this.validateMultiWorkspacesPermissions( + object.attributes.workspaces, + wrapperOptions.request, + WorkspacePermissionMode.Admin + ); + } + } + return await wrapperOptions.client.bulkUpdate(objects, options); + }; + return { ...wrapperOptions.client, get: getWithWorkspacePermissionControl, @@ -179,8 +215,8 @@ export class WorkspaceSavedObjectsClientWrapper { create: createWithWorkspacePermissionControl, bulkCreate: bulkCreateWithWorkspacePermissionControl, delete: deleteWithWorkspacePermissionControl, - update: wrapperOptions.client.update, - bulkUpdate: wrapperOptions.client.bulkUpdate, + update: updateWithWorkspacePermissionControl, + bulkUpdate: bulkUpdateWithWorkspacePermissionControl, }; };