Skip to content

Commit

Permalink
feat: call saved objects with internal user
Browse files Browse the repository at this point in the history
Signed-off-by: Lin Wang <wonglam@amazon.com>
  • Loading branch information
wanglam committed Aug 10, 2023
1 parent 23a77e9 commit e830036
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 5 deletions.
1 change: 1 addition & 0 deletions src/core/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ export class Server {
});
await this.workspaces.start({
savedObjects: savedObjectsStart,
uiSetting: uiSettingsStart,
});

this.coreStart = {
Expand Down
34 changes: 29 additions & 5 deletions src/core/server/workspaces/workspaces_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,17 @@ import {
ISavedObjectsRepository,
InternalSavedObjectsServiceSetup,
SavedObjectsServiceStart,
SavedObjectsClient,
} from '../saved_objects';
import { IWorkspaceDBImpl, WorkspaceAttribute } from './types';
import { WorkspacesClientWithSavedObject } from './workspaces_client';
import { WorkspaceSavedObjectsClientWrapper } from './saved_objects';
import { InternalUiSettingsServiceSetup } from '../ui_settings';
import { InternalUiSettingsServiceSetup, InternalUiSettingsServiceStart } from '../ui_settings';
import { uiSettings } from './ui_settings';
import { WORKSPACE_TYPE } from './constants';
import { MANAGEMENT_WORKSPACE, PUBLIC_WORKSPACE, PermissionMode } from '../../utils';
import { ACL, Permissions } from '../saved_objects/permission_control/acl';
import { SavedObjectsClientContract } from '../saved_objects/types';

export interface WorkspacesServiceSetup {
client: IWorkspaceDBImpl;
Expand All @@ -37,8 +39,9 @@ export interface WorkspacesSetupDeps {
uiSettings: InternalUiSettingsServiceSetup;
}

export interface WorkpsaceStartDeps {
export interface WorkspaceStartDeps {
savedObjects: SavedObjectsServiceStart;
uiSetting: InternalUiSettingsServiceStart;
}

export type InternalWorkspacesServiceSetup = WorkspacesServiceSetup;
Expand All @@ -48,6 +51,8 @@ export class WorkspacesService
implements CoreService<WorkspacesServiceSetup, WorkspacesServiceStart> {
private logger: Logger;
private client?: IWorkspaceDBImpl;
private internalOSClient?: SavedObjectsClientContract;
private shouldUseInternalClientAsScoped: boolean = false;

constructor(coreContext: CoreContext) {
this.logger = coreContext.logger.get('workspaces-service');
Expand Down Expand Up @@ -96,6 +101,20 @@ export class WorkspacesService
client: this.client as IWorkspaceDBImpl,
});

setupDeps.savedObject.setClientFactoryProvider((repositoryFactory) => {
const internalOSClient = new SavedObjectsClient(repositoryFactory.createInternalRepository());
this.internalOSClient = internalOSClient;

return ({ request, includedHiddenTypes }) => {
if (this.shouldUseInternalClientAsScoped) {
return internalOSClient;
}
return new SavedObjectsClient(
repositoryFactory.createScopedRepository(request, includedHiddenTypes)
);
};
});

return {
client: this.client,
};
Expand Down Expand Up @@ -129,7 +148,7 @@ export class WorkspacesService
}
}

private async setupWorkspaces(startDeps: WorkpsaceStartDeps) {
private async setupWorkspaces(startDeps: WorkspaceStartDeps) {
const internalRepository = startDeps.savedObjects.createInternalRepository();
const publicWorkspaceACL = new ACL().addPermission(
[PermissionMode.LibraryRead, PermissionMode.LibraryWrite],
Expand Down Expand Up @@ -164,9 +183,14 @@ export class WorkspacesService
),
]);
}

public async start(startDeps: WorkpsaceStartDeps): Promise<InternalWorkspacesServiceStart> {
public async start(startDeps: WorkspaceStartDeps): Promise<InternalWorkspacesServiceStart> {
this.logger.debug('Starting SavedObjects service');
if (!this.internalOSClient) {
throw new Error('Workspace internal saved object client not initialized.');
}
this.shouldUseInternalClientAsScoped = await startDeps.uiSetting
.asScopedToClient(this.internalOSClient)
.get('workspace:enabled');

this.setupWorkspaces(startDeps);

Expand Down

0 comments on commit e830036

Please sign in to comment.