Skip to content

Commit

Permalink
[DataViews] Use client-side authc.getCurrentUser from core.security (#…
Browse files Browse the repository at this point in the history
…186856)

## Summary

Part of #186574

Background: This PR serves as an example of a plugin migrating away from
depending on the Security plugin, which is a high priority effort for
the last release before 9.0. The Data Views plugin uses the
`authc.getCurrentUser` method as a means to use the user's profile_uid
for creating a user-hash which is sent as a field in the headers of a
particular request.

What makes this example interesting: Data Views was not able to have a
direct dependency on the Security plugin due to issues with a circular
dependency. As a workaround, it used the `coreSetup.plugins.onStart`
Promise to use Security services in a non-contractual way. The change in
this PR does away with the workaround and allows Data Views to consume
the Security service in a more typical way.

### Checklist

Delete any items that are not applicable to this PR.

- [X] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios

---------

Co-authored-by: kibanamachine <[email protected]>
Co-authored-by: Lukas Olson <[email protected]>
  • Loading branch information
3 people authored Jun 27, 2024
1 parent 66f36af commit 1224a05
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 20 deletions.
1 change: 0 additions & 1 deletion src/plugins/data_views/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ export type {
DataViewsContract,
HasDataViewsResponse,
IndicesViaSearchResponse,
UserIdGetter,
} from './types';

// Export plugin after all other imports
Expand Down
20 changes: 4 additions & 16 deletions src/plugins/data_views/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,13 @@

import { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public';
import { i18n } from '@kbn/i18n';
import type { SecurityPluginStart } from '@kbn/security-plugin-types-public';
import { getIndexPatternLoad } from './expressions';
import type { ClientConfigType } from '../common/types';
import {
DataViewsPublicPluginSetup,
DataViewsPublicPluginStart,
DataViewsPublicSetupDependencies,
DataViewsPublicStartDependencies,
UserIdGetter,
} from './types';

import { DataViewsApiClient } from '.';
Expand All @@ -43,7 +41,6 @@ export class DataViewsPublicPlugin
{
private readonly hasData = new HasData();
private rollupsEnabled: boolean = false;
private userIdGetter: UserIdGetter = async () => undefined;

constructor(private readonly initializerContext: PluginInitializerContext) {}

Expand All @@ -63,18 +60,6 @@ export class DataViewsPublicPlugin
}),
});

core.plugins.onStart<{ security: SecurityPluginStart }>('security').then(({ security }) => {
if (security.found) {
const getUserId = async function getUserId(): Promise<string | undefined> {
const currentUser = await security.contract.authc.getCurrentUser();
return currentUser?.profile_uid;
};
this.userIdGetter = getUserId;
} else {
throw new Error('Security plugin is not available, but is required for Data Views plugin');
}
});

return {
enableRollups: () => (this.rollupsEnabled = true),
};
Expand All @@ -101,7 +86,10 @@ export class DataViewsPublicPlugin
hasData: this.hasData.start(core),
uiSettings: new UiSettingsPublicToCommon(uiSettings),
savedObjectsClient: new ContentMagementWrapper(contentManagement.client),
apiClient: new DataViewsApiClient(http, () => this.userIdGetter()),
apiClient: new DataViewsApiClient(http, async () => {
const currentUser = await core.security.authc.getCurrentUser();
return currentUser?.profile_uid;
}),
fieldFormats,
http,
onNotification: (toastInputFields, key) => {
Expand Down
2 changes: 0 additions & 2 deletions src/plugins/data_views/public/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,6 @@ export interface DataViewsPublicStartDependencies {
contentManagement: ContentManagementPublicStart;
}

export type UserIdGetter = () => Promise<string | undefined>;

/**
* Data plugin public Setup contract
*/
Expand Down
1 change: 0 additions & 1 deletion src/plugins/data_views/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
"@kbn/object-versioning",
"@kbn/core-saved-objects-server",
"@kbn/logging",
"@kbn/security-plugin-types-public",
"@kbn/crypto-browser",
],
"exclude": [
Expand Down

0 comments on commit 1224a05

Please sign in to comment.