From 22b84abd375532675fbeaf051001646d9366be82 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 2 Jun 2021 15:48:57 +0100 Subject: [PATCH 01/16] [ML] Update file data visualizer permissions --- .../public/register_home.ts | 20 ++++++++++++++++++- x-pack/plugins/file_upload/server/routes.ts | 8 -------- .../plugins/ml/common/types/capabilities.ts | 8 ++------ x-pack/plugins/ml/public/register_feature.ts | 15 -------------- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/x-pack/plugins/file_data_visualizer/public/register_home.ts b/x-pack/plugins/file_data_visualizer/public/register_home.ts index e54c37a8d06bc0..b350a227c90877 100644 --- a/x-pack/plugins/file_data_visualizer/public/register_home.ts +++ b/x-pack/plugins/file_data_visualizer/public/register_home.ts @@ -7,14 +7,32 @@ import { i18n } from '@kbn/i18n'; import type { HomePublicPluginSetup } from '../../../../src/plugins/home/public'; +// import { FeatureCatalogueCategory } from '../../../../src/plugins/home/public'; import { FileDataVisualizerWrapper } from './lazy_load_bundle/component_wrapper'; +const PLUGIN_ID = 'fileDataViz'; + export function registerHomeAddData(home: HomePublicPluginSetup) { home.addData.registerAddDataTab({ - id: 'fileDataViz', + id: PLUGIN_ID, name: i18n.translate('xpack.fileDataVisualizer.embeddedTabTitle', { defaultMessage: 'Upload file', }), component: FileDataVisualizerWrapper, }); + + home.featureCatalogue.register({ + id: PLUGIN_ID, + title: i18n.translate('xpack.fileDataVisualizer.fileDataVisualizerTitle', { + defaultMessage: 'Upload a file', + }), + description: i18n.translate('xpack.fileDataVisualizer.fileDataVisualizerDescription', { + defaultMessage: 'Import your own CSV, NDJSON, or log file.', + }), + icon: 'document', + path: '/app/home#/tutorial_directory', + showOnHomePage: true, + category: 'data', + order: 520, + }); } diff --git a/x-pack/plugins/file_upload/server/routes.ts b/x-pack/plugins/file_upload/server/routes.ts index 3033f8300712c6..4edac15fa8794c 100644 --- a/x-pack/plugins/file_upload/server/routes.ts +++ b/x-pack/plugins/file_upload/server/routes.ts @@ -97,7 +97,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge accepts: ['text/*', 'application/json'], maxBytes: MAX_FILE_SIZE_BYTES, }, - tags: ['access:fileUpload:analyzeFile'], }, }, async (context, request, response) => { @@ -136,7 +135,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge accepts: ['application/json'], maxBytes: MAX_FILE_SIZE_BYTES, }, - tags: ['access:fileUpload:import'], }, }, async (context, request, response) => { @@ -180,9 +178,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge validate: { body: schema.object({ index: schema.string() }), }, - options: { - tags: ['access:fileUpload:import'], - }, }, async (context, request, response) => { try { @@ -221,9 +216,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge query: schema.maybe(schema.any()), }), }, - options: { - tags: ['access:fileUpload:analyzeFile'], - }, }, async (context, request, response) => { try { diff --git a/x-pack/plugins/ml/common/types/capabilities.ts b/x-pack/plugins/ml/common/types/capabilities.ts index 3545a85305c178..8bda72adc82ff2 100644 --- a/x-pack/plugins/ml/common/types/capabilities.ts +++ b/x-pack/plugins/ml/common/types/capabilities.ts @@ -105,11 +105,7 @@ export function getPluginPrivileges() { return { admin: { ...privilege, - api: [ - 'fileUpload:import', - 'fileUpload:analyzeFile', - ...allMlCapabilitiesKeys.map((k) => `ml:${k}`), - ], + api: allMlCapabilitiesKeys.map((k) => `ml:${k}`), catalogue: [PLUGIN_ID, `${PLUGIN_ID}_file_data_visualizer`], ui: allMlCapabilitiesKeys, savedObject: { @@ -127,7 +123,7 @@ export function getPluginPrivileges() { }, user: { ...privilege, - api: ['fileUpload:analyzeFile', ...userMlCapabilitiesKeys.map((k) => `ml:${k}`)], + api: userMlCapabilitiesKeys.map((k) => `ml:${k}`), catalogue: [PLUGIN_ID], management: { insightsAndAlerting: [] }, ui: userMlCapabilitiesKeys, diff --git a/x-pack/plugins/ml/public/register_feature.ts b/x-pack/plugins/ml/public/register_feature.ts index 191e064c85b900..1b88a6be7138d7 100644 --- a/x-pack/plugins/ml/public/register_feature.ts +++ b/x-pack/plugins/ml/public/register_feature.ts @@ -37,19 +37,4 @@ export const registerFeature = (home: HomePublicPluginSetup) => { solutionId: 'kibana', order: 500, }); - - home.featureCatalogue.register({ - id: `${PLUGIN_ID}_file_data_visualizer`, - title: i18n.translate('xpack.ml.fileDataVisualizerTitle', { - defaultMessage: 'Upload a file', - }), - description: i18n.translate('xpack.ml.fileDataVisualizerDescription', { - defaultMessage: 'Import your own CSV, NDJSON, or log file.', - }), - icon: 'document', - path: '/app/ml/filedatavisualizer', - showOnHomePage: true, - category: FeatureCatalogueCategory.DATA, - order: 520, - }); }; From 15df2e68a6d674bc4e802436450996bc94fd4f3e Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 2 Jun 2021 15:58:11 +0100 Subject: [PATCH 02/16] adding home bundle --- x-pack/plugins/file_data_visualizer/kibana.json | 3 ++- x-pack/plugins/file_data_visualizer/public/register_home.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/file_data_visualizer/kibana.json b/x-pack/plugins/file_data_visualizer/kibana.json index eea52bb6e98b2c..3c898a7dc4ff7a 100644 --- a/x-pack/plugins/file_data_visualizer/kibana.json +++ b/x-pack/plugins/file_data_visualizer/kibana.json @@ -20,7 +20,8 @@ "requiredBundles": [ "kibanaReact", "maps", - "esUiShared" + "esUiShared", + "home" ], "extraPublicDirs": [ "common" diff --git a/x-pack/plugins/file_data_visualizer/public/register_home.ts b/x-pack/plugins/file_data_visualizer/public/register_home.ts index b350a227c90877..b8d4cb02d925d5 100644 --- a/x-pack/plugins/file_data_visualizer/public/register_home.ts +++ b/x-pack/plugins/file_data_visualizer/public/register_home.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { HomePublicPluginSetup } from '../../../../src/plugins/home/public'; -// import { FeatureCatalogueCategory } from '../../../../src/plugins/home/public'; +import { FeatureCatalogueCategory } from '../../../../src/plugins/home/public'; import { FileDataVisualizerWrapper } from './lazy_load_bundle/component_wrapper'; const PLUGIN_ID = 'fileDataViz'; @@ -32,7 +32,7 @@ export function registerHomeAddData(home: HomePublicPluginSetup) { icon: 'document', path: '/app/home#/tutorial_directory', showOnHomePage: true, - category: 'data', + category: FeatureCatalogueCategory.DATA, order: 520, }); } From 2473bcf0ea27b5e2b850669861e68dda1e7bcb11 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 2 Jun 2021 16:10:23 +0100 Subject: [PATCH 03/16] fixing translations --- x-pack/plugins/translations/translations/ja-JP.json | 2 -- x-pack/plugins/translations/translations/zh-CN.json | 2 -- 2 files changed, 4 deletions(-) diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index d1e6835b486b23..0586310c9e4634 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14765,8 +14765,6 @@ "xpack.ml.fieldTypeIcon.numberTypeAriaLabel": "数字タイプ", "xpack.ml.fieldTypeIcon.textTypeAriaLabel": "テキストタイプ", "xpack.ml.fieldTypeIcon.unknownTypeAriaLabel": "不明なタイプ", - "xpack.ml.fileDataVisualizerDescription": "CSV、NDJSON、またはログファイルをインポートします。", - "xpack.ml.fileDataVisualizerTitle": "ファイルをアップロード", "xpack.ml.formatters.metricChangeDescription.actualSameAsTypicalDescription": "実際値が通常値と同じ", "xpack.ml.formatters.metricChangeDescription.moreThan100xHigherDescription": "100x よりも高い", "xpack.ml.formatters.metricChangeDescription.moreThan100xLowerDescription": "100x よりも低い", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 97f3ebdb733968..6bf6e5fa9aa7f2 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -14958,8 +14958,6 @@ "xpack.ml.fieldTypeIcon.numberTypeAriaLabel": "数字类型", "xpack.ml.fieldTypeIcon.textTypeAriaLabel": "文本类型", "xpack.ml.fieldTypeIcon.unknownTypeAriaLabel": "未知类型", - "xpack.ml.fileDataVisualizerDescription": "导入您自己的 CSV、NDJSON 或日志文件。", - "xpack.ml.fileDataVisualizerTitle": "上传文件", "xpack.ml.formatters.metricChangeDescription.actualSameAsTypicalDescription": "实际上与典型模式相同", "xpack.ml.formatters.metricChangeDescription.moreThan100xHigherDescription": "高 100 多倍", "xpack.ml.formatters.metricChangeDescription.moreThan100xLowerDescription": "低 100 多倍", From 8cdff37e776a61d944e5bfa72c3c65ab70857ad0 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Thu, 17 Jun 2021 18:19:11 +0100 Subject: [PATCH 04/16] removing home from bundles --- x-pack/plugins/data_visualizer/kibana.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/plugins/data_visualizer/kibana.json b/x-pack/plugins/data_visualizer/kibana.json index a0028a8a84213c..b024a52e647218 100644 --- a/x-pack/plugins/data_visualizer/kibana.json +++ b/x-pack/plugins/data_visualizer/kibana.json @@ -22,8 +22,7 @@ "home", "kibanaReact", "maps", - "esUiShared", - "home" + "esUiShared" ], "extraPublicDirs": [ "common" From ef820e514fab59b4b55765f16bf1f2853049f32c Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Fri, 18 Jun 2021 12:55:45 +0100 Subject: [PATCH 05/16] switching to current user for analysis --- x-pack/plugins/file_upload/server/analyze_file.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/file_upload/server/analyze_file.tsx b/x-pack/plugins/file_upload/server/analyze_file.tsx index 22396970834928..fd86555c859307 100644 --- a/x-pack/plugins/file_upload/server/analyze_file.tsx +++ b/x-pack/plugins/file_upload/server/analyze_file.tsx @@ -14,7 +14,7 @@ export async function analyzeFile( overrides: InputOverrides ): Promise { overrides.explain = overrides.explain === undefined ? 'true' : overrides.explain; - const { body } = await client.asInternalUser.textStructure.findStructure({ + const { body } = await client.asCurrentUser.textStructure.findStructure({ body: data, ...overrides, }); From 62a7868a4a05419939ff117dae287c5add86773b Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Fri, 18 Jun 2021 15:25:27 +0100 Subject: [PATCH 06/16] adding find structure permission check --- .../components/about_panel/about_panel.tsx | 4 ++- .../file_data_visualizer_view.js | 32 +++++++++++++---- .../file_error_callouts.tsx | 23 ++++++++++++ x-pack/plugins/file_upload/common/types.ts | 4 +++ .../plugins/file_upload/public/api/index.ts | 20 ++++++++++- x-pack/plugins/file_upload/public/plugin.ts | 2 ++ .../file_upload/server/check_privileges.ts | 35 +++++++++++++++++-- x-pack/plugins/file_upload/server/routes.ts | 32 ++++++++++++++++- 8 files changed, 140 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx index a176450250ba9d..891f71660b2a84 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx @@ -25,10 +25,11 @@ import { import { WelcomeContent } from './welcome_content'; interface Props { + disabled: boolean | undefined; onFilePickerChange(files: FileList | null): void; } -export const AboutPanel: FC = ({ onFilePickerChange }) => { +export const AboutPanel: FC = ({ disabled, onFilePickerChange }) => { return ( @@ -41,6 +42,7 @@ export const AboutPanel: FC = ({ onFilePickerChange }) => {
{ @@ -275,6 +285,7 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible, bottomBarVisible, hasPermissionToImport, + hasFindFileStructurePermission, } = this.state; const fields = @@ -286,10 +297,17 @@ export class FileDataVisualizerView extends Component {
{mode === MODE.READ && ( <> - {!loading && !loaded && } + {!loading && !loaded && ( + + )} {loading && } + {hasFindFileStructurePermission === false && } + {fileTooLarge && ( )} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx index 7b6378e34e78e8..710f1546ea9843 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx @@ -146,3 +146,26 @@ export const Explanation: FC<{ error: FindFileStructureErrorResponse }> = ({ err ); }; + +export const FindFileStructurePermissionDenied: FC = () => { + return ( + <> + + } + color="danger" + iconType="cross" + data-test-subj="dataVisualizerFileUploadErrorCallout fileCouldNotBeRead" + > + + + + ); +}; diff --git a/x-pack/plugins/file_upload/common/types.ts b/x-pack/plugins/file_upload/common/types.ts index e10b9e90a71d8e..a9a1b566c0e317 100644 --- a/x-pack/plugins/file_upload/common/types.ts +++ b/x-pack/plugins/file_upload/common/types.ts @@ -93,6 +93,10 @@ export interface HasImportPermission { hasImportPermission: boolean; } +export interface HasFindFileStructurePermission { + hasFindFileStructurePermission: boolean; +} + export type InputData = any[]; export interface ImportResponse { diff --git a/x-pack/plugins/file_upload/public/api/index.ts b/x-pack/plugins/file_upload/public/api/index.ts index f3a184f27dfac8..b7cfec59124558 100644 --- a/x-pack/plugins/file_upload/public/api/index.ts +++ b/x-pack/plugins/file_upload/public/api/index.ts @@ -7,7 +7,11 @@ import { lazyLoadModules } from '../lazy_load_bundle'; import type { IImporter, ImportFactoryOptions } from '../importer'; -import type { HasImportPermission, FindFileStructureResponse } from '../../common'; +import type { + HasImportPermission, + HasFindFileStructurePermission, + FindFileStructureResponse, +} from '../../common'; import type { getMaxBytes, getMaxBytesFormatted } from '../importer/get_max_bytes'; import { JsonUploadAndParseAsyncWrapper } from './json_upload_and_parse_async_wrapper'; import { IndexNameFormAsyncWrapper } from './index_name_form_async_wrapper'; @@ -19,6 +23,7 @@ export interface FileUploadStartApi { getMaxBytes: typeof getMaxBytes; getMaxBytesFormatted: typeof getMaxBytesFormatted; hasImportPermission: typeof hasImportPermission; + hasFindFileStructurePermission: typeof hasFindFileStructurePermission; checkIndexExists: typeof checkIndexExists; getTimeFieldRange: typeof getTimeFieldRange; analyzeFile: typeof analyzeFile; @@ -61,6 +66,19 @@ export async function analyzeFile( }); } +export async function hasFindFileStructurePermission(): Promise { + const fileUploadModules = await lazyLoadModules(); + try { + const resp = await fileUploadModules.getHttp().fetch({ + path: `/internal/file_data_visualizer/has_find_file_structure_permission`, + method: 'GET', + }); + return resp.hasFindFileStructurePermission; + } catch (error) { + return false; + } +} + export async function hasImportPermission(params: HasImportPermissionParams): Promise { const fileUploadModules = await lazyLoadModules(); try { diff --git a/x-pack/plugins/file_upload/public/plugin.ts b/x-pack/plugins/file_upload/public/plugin.ts index b7b81e19b22195..955678a5c01fb1 100644 --- a/x-pack/plugins/file_upload/public/plugin.ts +++ b/x-pack/plugins/file_upload/public/plugin.ts @@ -11,6 +11,7 @@ import { FileUploadComponent, importerFactory, hasImportPermission, + hasFindFileStructurePermission, IndexNameFormComponent, checkIndexExists, getTimeFieldRange, @@ -48,6 +49,7 @@ export class FileUploadPlugin getMaxBytes, getMaxBytesFormatted, hasImportPermission, + hasFindFileStructurePermission, checkIndexExists, getTimeFieldRange, analyzeFile, diff --git a/x-pack/plugins/file_upload/server/check_privileges.ts b/x-pack/plugins/file_upload/server/check_privileges.ts index 42cc53f693fec0..3d8dc7053ff7f8 100644 --- a/x-pack/plugins/file_upload/server/check_privileges.ts +++ b/x-pack/plugins/file_upload/server/check_privileges.ts @@ -8,12 +8,15 @@ import { KibanaRequest } from 'kibana/server'; import { AuthorizationServiceSetup, CheckPrivilegesPayload } from '../../security/server'; -interface Deps { +interface BasicDeps { request: KibanaRequest; authorization?: Pick< AuthorizationServiceSetup, 'mode' | 'actions' | 'checkPrivilegesDynamicallyWithRequest' >; +} + +interface FileUploadDeps extends BasicDeps { checkHasManagePipeline: boolean; checkCreateIndexPattern: boolean; indexName?: string; @@ -25,7 +28,7 @@ export const checkFileUploadPrivileges = async ({ checkHasManagePipeline, checkCreateIndexPattern, indexName, -}: Deps) => { +}: FileUploadDeps) => { const requiresAuthz = authorization?.mode.useRbacForRequest(request) ?? false; if (!authorization || !requiresAuthz) { @@ -53,3 +56,31 @@ export const checkFileUploadPrivileges = async ({ return { hasImportPermission: checkPrivilegesResp.hasAllRequested }; }; + +export const checkFindFileStructurePrivileges = async ({ request, authorization }: BasicDeps) => { + const requiresAuthz = authorization?.mode.useRbacForRequest(request) ?? false; + + if (!authorization || !requiresAuthz) { + return { hasFindFileStructurePermission: true }; + } + + if (!request.auth.isAuthenticated) { + return { hasFindFileStructurePermission: false }; + } + + const checkPrivilegesPayload: CheckPrivilegesPayload = { + elasticsearch: { + cluster: ['monitor', 'monitor_text_structure'], + index: {}, + }, + }; + + const checkPrivileges = authorization.checkPrivilegesDynamicallyWithRequest(request); + const checkPrivilegesResp = await checkPrivileges(checkPrivilegesPayload); + + const hasFindFileStructurePermission = checkPrivilegesResp.privileges.elasticsearch.cluster.some( + ({ authorized }) => authorized + ); + + return { hasFindFileStructurePermission }; +}; diff --git a/x-pack/plugins/file_upload/server/routes.ts b/x-pack/plugins/file_upload/server/routes.ts index a136e0164ff7a2..d7c1f50a998ea4 100644 --- a/x-pack/plugins/file_upload/server/routes.ts +++ b/x-pack/plugins/file_upload/server/routes.ts @@ -28,7 +28,7 @@ import { runtimeMappingsSchema, } from './schemas'; import { StartDeps } from './types'; -import { checkFileUploadPrivileges } from './check_privileges'; +import { checkFileUploadPrivileges, checkFindFileStructurePrivileges } from './check_privileges'; function importData( client: IScopedClusterClient, @@ -81,6 +81,36 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge } ); + /** + * @apiGroup FileDataVisualizer + * + * @api {post} /internal/file_data_visualizer/has_find_file_structure_permission Check permissions for find file structure endpoint + * @apiName HasFindFileStructurePermission + * @apiDescription heck permissions for find file structure endpoint + * + */ + router.get( + { + path: '/internal/file_data_visualizer/has_find_file_structure_permission', + validate: false, + }, + async (context, request, response) => { + try { + const [, pluginsStart] = await coreSetup.getStartServices(); + + const { hasFindFileStructurePermission } = await checkFindFileStructurePrivileges({ + authorization: pluginsStart.security?.authz, + request, + }); + + return response.ok({ body: { hasFindFileStructurePermission } }); + } catch (e) { + logger.warn(`Unable to check import permission, error: ${e.message}`); + return response.ok({ body: { hasFindFileStructurePermission: false } }); + } + } + ); + /** * @apiGroup FileDataVisualizer * From d542bf860055e961c3128d23ecd909bfd4a6d3b0 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Fri, 18 Jun 2021 15:29:24 +0100 Subject: [PATCH 07/16] clean up --- .../file_data_visualizer/components/about_panel/about_panel.tsx | 2 +- .../file_data_visualizer_view/file_error_callouts.tsx | 2 +- x-pack/plugins/file_upload/server/routes.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx index 891f71660b2a84..6e733d63168751 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx @@ -25,7 +25,7 @@ import { import { WelcomeContent } from './welcome_content'; interface Props { - disabled: boolean | undefined; + disabled: boolean; onFilePickerChange(files: FileList | null): void; } diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx index 710f1546ea9843..4a959e6d6e02a3 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx @@ -159,7 +159,7 @@ export const FindFileStructurePermissionDenied: FC = () => { } color="danger" iconType="cross" - data-test-subj="dataVisualizerFileUploadErrorCallout fileCouldNotBeRead" + data-test-subj="dataVisualizerFileStructurePermissionDeniedErrorCallout" > , logge * * @api {post} /internal/file_data_visualizer/has_find_file_structure_permission Check permissions for find file structure endpoint * @apiName HasFindFileStructurePermission - * @apiDescription heck permissions for find file structure endpoint + * @apiDescription check permissions for find file structure endpoint * */ router.get( From 8ff3b12a62dab28bd674be3774e91b3be3fcfa20 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Fri, 18 Jun 2021 16:53:33 +0100 Subject: [PATCH 08/16] updating text --- .../file_data_visualizer_view/file_error_callouts.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx index 4a959e6d6e02a3..197c181d6bb7de 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx @@ -163,7 +163,7 @@ export const FindFileStructurePermissionDenied: FC = () => { > From d19e7385bf1384eb8d239c74244e70cc1fc73764 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Mon, 21 Jun 2021 14:01:59 +0100 Subject: [PATCH 09/16] updating maps --- x-pack/plugins/maps/server/plugin.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/plugins/maps/server/plugin.ts b/x-pack/plugins/maps/server/plugin.ts index c7532979320378..c7c95ca86b967c 100644 --- a/x-pack/plugins/maps/server/plugin.ts +++ b/x-pack/plugins/maps/server/plugin.ts @@ -192,7 +192,6 @@ export class MapsPlugin implements Plugin { catalogue: [APP_ID], privileges: { all: { - api: ['fileUpload:import'], app: [APP_ID, 'kibana'], catalogue: [APP_ID], savedObject: { From 8e7c537451dfb9d70b06e6de104206a0f872e2c0 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 11:58:39 +0100 Subject: [PATCH 10/16] removing has_find_file_structure_permission endpoint --- .../file_data_visualizer_view.js | 31 ++++------------ .../plugins/features/server/oss_features.ts | 1 + x-pack/plugins/file_upload/common/types.ts | 4 --- .../plugins/file_upload/public/api/index.ts | 20 +---------- x-pack/plugins/file_upload/public/plugin.ts | 2 -- .../file_upload/server/analyze_file.tsx | 2 +- .../file_upload/server/check_privileges.ts | 28 --------------- x-pack/plugins/file_upload/server/routes.ts | 36 +++---------------- 8 files changed, 15 insertions(+), 109 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js index 719b7e37bdf8a2..fc6f9830f8b334 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js @@ -15,11 +15,7 @@ import { isEqual } from 'lodash'; import { AboutPanel, LoadingPanel } from '../about_panel'; import { BottomBar } from '../bottom_bar'; import { ResultsView } from '../results_view'; -import { - FileCouldNotBeRead, - FileTooLarge, - FindFileStructurePermissionDenied, -} from './file_error_callouts'; +import { FileCouldNotBeRead, FileTooLarge } from './file_error_callouts'; import { EditFlyout } from '../edit_flyout'; import { ExplanationFlyout } from '../explanation_flyout'; import { ImportView } from '../import_view'; @@ -54,7 +50,6 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible: false, bottomBarVisible: false, hasPermissionToImport: false, - hasFindFileStructurePermission: undefined, }; this.overrides = {}; @@ -72,15 +67,11 @@ export class FileDataVisualizerView extends Component { // note, calling hasImportPermission with no arguments just checks the // cluster privileges, the user will still need index privileges to create and ingest - const [hasPermissionToImport, hasFindFileStructurePermission] = await Promise.all([ - this.props.fileUpload.hasImportPermission({ - checkCreateIndexPattern: false, - checkHasManagePipeline: true, - }), - this.props.fileUpload.hasFindFileStructurePermission(), - ]); - - this.setState({ hasPermissionToImport, hasFindFileStructurePermission }); + const hasPermissionToImport = await this.props.fileUpload.hasImportPermission({ + checkCreateIndexPattern: false, + checkHasManagePipeline: true, + }); + this.setState({ hasPermissionToImport }); } onFilePickerChange = (files) => { @@ -285,7 +276,6 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible, bottomBarVisible, hasPermissionToImport, - hasFindFileStructurePermission, } = this.state; const fields = @@ -297,17 +287,10 @@ export class FileDataVisualizerView extends Component {
{mode === MODE.READ && ( <> - {!loading && !loaded && ( - - )} + {!loading && !loaded && } {loading && } - {hasFindFileStructurePermission === false && } - {fileTooLarge && ( )} diff --git a/x-pack/plugins/features/server/oss_features.ts b/x-pack/plugins/features/server/oss_features.ts index d1e96b5a788ec3..f3fd934b4c3e83 100644 --- a/x-pack/plugins/features/server/oss_features.ts +++ b/x-pack/plugins/features/server/oss_features.ts @@ -37,6 +37,7 @@ export const buildOSSFeatures = ({ privileges: { all: { app: ['discover', 'kibana'], + api: ['fileUpload:analyzeFile'], catalogue: ['discover'], savedObject: { all: ['search', 'query', 'index-pattern'], diff --git a/x-pack/plugins/file_upload/common/types.ts b/x-pack/plugins/file_upload/common/types.ts index a9a1b566c0e317..e10b9e90a71d8e 100644 --- a/x-pack/plugins/file_upload/common/types.ts +++ b/x-pack/plugins/file_upload/common/types.ts @@ -93,10 +93,6 @@ export interface HasImportPermission { hasImportPermission: boolean; } -export interface HasFindFileStructurePermission { - hasFindFileStructurePermission: boolean; -} - export type InputData = any[]; export interface ImportResponse { diff --git a/x-pack/plugins/file_upload/public/api/index.ts b/x-pack/plugins/file_upload/public/api/index.ts index b7cfec59124558..f3a184f27dfac8 100644 --- a/x-pack/plugins/file_upload/public/api/index.ts +++ b/x-pack/plugins/file_upload/public/api/index.ts @@ -7,11 +7,7 @@ import { lazyLoadModules } from '../lazy_load_bundle'; import type { IImporter, ImportFactoryOptions } from '../importer'; -import type { - HasImportPermission, - HasFindFileStructurePermission, - FindFileStructureResponse, -} from '../../common'; +import type { HasImportPermission, FindFileStructureResponse } from '../../common'; import type { getMaxBytes, getMaxBytesFormatted } from '../importer/get_max_bytes'; import { JsonUploadAndParseAsyncWrapper } from './json_upload_and_parse_async_wrapper'; import { IndexNameFormAsyncWrapper } from './index_name_form_async_wrapper'; @@ -23,7 +19,6 @@ export interface FileUploadStartApi { getMaxBytes: typeof getMaxBytes; getMaxBytesFormatted: typeof getMaxBytesFormatted; hasImportPermission: typeof hasImportPermission; - hasFindFileStructurePermission: typeof hasFindFileStructurePermission; checkIndexExists: typeof checkIndexExists; getTimeFieldRange: typeof getTimeFieldRange; analyzeFile: typeof analyzeFile; @@ -66,19 +61,6 @@ export async function analyzeFile( }); } -export async function hasFindFileStructurePermission(): Promise { - const fileUploadModules = await lazyLoadModules(); - try { - const resp = await fileUploadModules.getHttp().fetch({ - path: `/internal/file_data_visualizer/has_find_file_structure_permission`, - method: 'GET', - }); - return resp.hasFindFileStructurePermission; - } catch (error) { - return false; - } -} - export async function hasImportPermission(params: HasImportPermissionParams): Promise { const fileUploadModules = await lazyLoadModules(); try { diff --git a/x-pack/plugins/file_upload/public/plugin.ts b/x-pack/plugins/file_upload/public/plugin.ts index 955678a5c01fb1..b7b81e19b22195 100644 --- a/x-pack/plugins/file_upload/public/plugin.ts +++ b/x-pack/plugins/file_upload/public/plugin.ts @@ -11,7 +11,6 @@ import { FileUploadComponent, importerFactory, hasImportPermission, - hasFindFileStructurePermission, IndexNameFormComponent, checkIndexExists, getTimeFieldRange, @@ -49,7 +48,6 @@ export class FileUploadPlugin getMaxBytes, getMaxBytesFormatted, hasImportPermission, - hasFindFileStructurePermission, checkIndexExists, getTimeFieldRange, analyzeFile, diff --git a/x-pack/plugins/file_upload/server/analyze_file.tsx b/x-pack/plugins/file_upload/server/analyze_file.tsx index fd86555c859307..22396970834928 100644 --- a/x-pack/plugins/file_upload/server/analyze_file.tsx +++ b/x-pack/plugins/file_upload/server/analyze_file.tsx @@ -14,7 +14,7 @@ export async function analyzeFile( overrides: InputOverrides ): Promise { overrides.explain = overrides.explain === undefined ? 'true' : overrides.explain; - const { body } = await client.asCurrentUser.textStructure.findStructure({ + const { body } = await client.asInternalUser.textStructure.findStructure({ body: data, ...overrides, }); diff --git a/x-pack/plugins/file_upload/server/check_privileges.ts b/x-pack/plugins/file_upload/server/check_privileges.ts index 3d8dc7053ff7f8..3ef5a670e1a8a4 100644 --- a/x-pack/plugins/file_upload/server/check_privileges.ts +++ b/x-pack/plugins/file_upload/server/check_privileges.ts @@ -56,31 +56,3 @@ export const checkFileUploadPrivileges = async ({ return { hasImportPermission: checkPrivilegesResp.hasAllRequested }; }; - -export const checkFindFileStructurePrivileges = async ({ request, authorization }: BasicDeps) => { - const requiresAuthz = authorization?.mode.useRbacForRequest(request) ?? false; - - if (!authorization || !requiresAuthz) { - return { hasFindFileStructurePermission: true }; - } - - if (!request.auth.isAuthenticated) { - return { hasFindFileStructurePermission: false }; - } - - const checkPrivilegesPayload: CheckPrivilegesPayload = { - elasticsearch: { - cluster: ['monitor', 'monitor_text_structure'], - index: {}, - }, - }; - - const checkPrivileges = authorization.checkPrivilegesDynamicallyWithRequest(request); - const checkPrivilegesResp = await checkPrivileges(checkPrivilegesPayload); - - const hasFindFileStructurePermission = checkPrivilegesResp.privileges.elasticsearch.cluster.some( - ({ authorized }) => authorized - ); - - return { hasFindFileStructurePermission }; -}; diff --git a/x-pack/plugins/file_upload/server/routes.ts b/x-pack/plugins/file_upload/server/routes.ts index 0a8b22fb9603be..c957916e7f3210 100644 --- a/x-pack/plugins/file_upload/server/routes.ts +++ b/x-pack/plugins/file_upload/server/routes.ts @@ -28,7 +28,7 @@ import { runtimeMappingsSchema, } from './schemas'; import { StartDeps } from './types'; -import { checkFileUploadPrivileges, checkFindFileStructurePrivileges } from './check_privileges'; +import { checkFileUploadPrivileges } from './check_privileges'; function importData( client: IScopedClusterClient, @@ -81,36 +81,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge } ); - /** - * @apiGroup FileDataVisualizer - * - * @api {post} /internal/file_data_visualizer/has_find_file_structure_permission Check permissions for find file structure endpoint - * @apiName HasFindFileStructurePermission - * @apiDescription check permissions for find file structure endpoint - * - */ - router.get( - { - path: '/internal/file_data_visualizer/has_find_file_structure_permission', - validate: false, - }, - async (context, request, response) => { - try { - const [, pluginsStart] = await coreSetup.getStartServices(); - - const { hasFindFileStructurePermission } = await checkFindFileStructurePrivileges({ - authorization: pluginsStart.security?.authz, - request, - }); - - return response.ok({ body: { hasFindFileStructurePermission } }); - } catch (e) { - logger.warn(`Unable to check import permission, error: ${e.message}`); - return response.ok({ body: { hasFindFileStructurePermission: false } }); - } - } - ); - /** * @apiGroup FileDataVisualizer * @@ -132,6 +102,7 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge accepts: ['text/*', 'application/json'], maxBytes: MAX_FILE_SIZE_BYTES, }, + tags: ['access:fileUpload:analyzeFile'], }, }, async (context, request, response) => { @@ -252,6 +223,9 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge runtimeMappings: schema.maybe(runtimeMappingsSchema), }), }, + options: { + tags: ['access:fileUpload:analyzeFile'], + }, }, async (context, request, response) => { try { From df2b11bdf69948f728cdfc5d818b0d4f77abf71b Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 12:08:42 +0100 Subject: [PATCH 11/16] removing more code --- .../components/about_panel/about_panel.tsx | 4 +--- .../file_data_visualizer_view.js | 1 - .../file_error_callouts.tsx | 23 ------------------- .../file_upload/server/check_privileges.ts | 7 ++---- 4 files changed, 3 insertions(+), 32 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx index 6e733d63168751..a176450250ba9d 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx @@ -25,11 +25,10 @@ import { import { WelcomeContent } from './welcome_content'; interface Props { - disabled: boolean; onFilePickerChange(files: FileList | null): void; } -export const AboutPanel: FC = ({ disabled, onFilePickerChange }) => { +export const AboutPanel: FC = ({ onFilePickerChange }) => { return ( @@ -42,7 +41,6 @@ export const AboutPanel: FC = ({ disabled, onFilePickerChange }) => {
= ({ err ); }; - -export const FindFileStructurePermissionDenied: FC = () => { - return ( - <> - - } - color="danger" - iconType="cross" - data-test-subj="dataVisualizerFileStructurePermissionDeniedErrorCallout" - > - - - - ); -}; diff --git a/x-pack/plugins/file_upload/server/check_privileges.ts b/x-pack/plugins/file_upload/server/check_privileges.ts index 3ef5a670e1a8a4..42cc53f693fec0 100644 --- a/x-pack/plugins/file_upload/server/check_privileges.ts +++ b/x-pack/plugins/file_upload/server/check_privileges.ts @@ -8,15 +8,12 @@ import { KibanaRequest } from 'kibana/server'; import { AuthorizationServiceSetup, CheckPrivilegesPayload } from '../../security/server'; -interface BasicDeps { +interface Deps { request: KibanaRequest; authorization?: Pick< AuthorizationServiceSetup, 'mode' | 'actions' | 'checkPrivilegesDynamicallyWithRequest' >; -} - -interface FileUploadDeps extends BasicDeps { checkHasManagePipeline: boolean; checkCreateIndexPattern: boolean; indexName?: string; @@ -28,7 +25,7 @@ export const checkFileUploadPrivileges = async ({ checkHasManagePipeline, checkCreateIndexPattern, indexName, -}: FileUploadDeps) => { +}: Deps) => { const requiresAuthz = authorization?.mode.useRbacForRequest(request) ?? false; if (!authorization || !requiresAuthz) { From d77e042e1e63efd8144c50cb2c340a344feb2ff0 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 12:33:32 +0100 Subject: [PATCH 12/16] adding permission error message --- .../file_data_visualizer_view.js | 34 ++++++++++++++----- .../file_error_callouts.tsx | 23 +++++++++++++ 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js index e36f1040447e71..c13ea4dfec615c 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js @@ -15,7 +15,11 @@ import { isEqual } from 'lodash'; import { AboutPanel, LoadingPanel } from '../about_panel'; import { BottomBar } from '../bottom_bar'; import { ResultsView } from '../results_view'; -import { FileCouldNotBeRead, FileTooLarge } from './file_error_callouts'; +import { + FileCouldNotBeRead, + FileTooLarge, + FindFileStructurePermissionDenied, +} from './file_error_callouts'; import { EditFlyout } from '../edit_flyout'; import { ExplanationFlyout } from '../explanation_flyout'; import { ImportView } from '../import_view'; @@ -50,6 +54,7 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible: false, bottomBarVisible: false, hasPermissionToImport: false, + hasFindFileStructurePermission: true, }; this.overrides = {}; @@ -87,6 +92,7 @@ export class FileDataVisualizerView extends Component { fileSize: 0, fileTooLarge: false, fileCouldNotBeRead: false, + hasFindFileStructurePermission: true, serverError: null, results: undefined, explanation: undefined, @@ -182,17 +188,19 @@ export class FileDataVisualizerView extends Component { fileCouldNotBeRead: isRetry, }); } catch (error) { + const hasFindFileStructurePermission = error.body.statusCode !== 403; this.setState({ results: undefined, explanation: undefined, loaded: false, loading: false, fileCouldNotBeRead: true, + hasFindFileStructurePermission, serverError: error, }); // reload the results with the previous overrides - if (isRetry === false) { + if (isRetry === false && hasFindFileStructurePermission === true) { this.setState({ loading: true, loaded: false, @@ -275,6 +283,7 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible, bottomBarVisible, hasPermissionToImport, + hasFindFileStructurePermission, } = this.state; const fields = @@ -286,7 +295,12 @@ export class FileDataVisualizerView extends Component {
{mode === MODE.READ && ( <> - {!loading && !loaded && } + {!loading && !loaded && ( + + )} {loading && } @@ -296,11 +310,15 @@ export class FileDataVisualizerView extends Component { {fileCouldNotBeRead && loading === false && ( <> - + {hasFindFileStructurePermission ? ( + + ) : ( + + )} )} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx index 7b6378e34e78e8..f131a2ff176815 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx @@ -146,3 +146,26 @@ export const Explanation: FC<{ error: FindFileStructureErrorResponse }> = ({ err ); }; + +export const FindFileStructurePermissionDenied: FC = () => { + return ( + <> + + } + color="danger" + iconType="cross" + data-test-subj="dataVisualizerFileStructurePermissionDeniedErrorCallout" + > + + + + ); +}; From fc9949f017c1a3920942c1ff277013ba43efd329 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 12:38:03 +0100 Subject: [PATCH 13/16] renaming variable --- .../file_data_visualizer_view.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js index c13ea4dfec615c..99b6ef602985f8 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js @@ -54,7 +54,7 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible: false, bottomBarVisible: false, hasPermissionToImport: false, - hasFindFileStructurePermission: true, + fileCouldNotBeReadPermissionError: false, }; this.overrides = {}; @@ -92,7 +92,7 @@ export class FileDataVisualizerView extends Component { fileSize: 0, fileTooLarge: false, fileCouldNotBeRead: false, - hasFindFileStructurePermission: true, + fileCouldNotBeReadPermissionError: false, serverError: null, results: undefined, explanation: undefined, @@ -188,19 +188,19 @@ export class FileDataVisualizerView extends Component { fileCouldNotBeRead: isRetry, }); } catch (error) { - const hasFindFileStructurePermission = error.body.statusCode !== 403; + const fileCouldNotBeReadPermissionError = error.body.statusCode === 403; this.setState({ results: undefined, explanation: undefined, loaded: false, loading: false, fileCouldNotBeRead: true, - hasFindFileStructurePermission, + fileCouldNotBeReadPermissionError, serverError: error, }); // reload the results with the previous overrides - if (isRetry === false && hasFindFileStructurePermission === true) { + if (isRetry === false && fileCouldNotBeReadPermissionError === false) { this.setState({ loading: true, loaded: false, @@ -283,7 +283,7 @@ export class FileDataVisualizerView extends Component { isExplanationFlyoutVisible, bottomBarVisible, hasPermissionToImport, - hasFindFileStructurePermission, + fileCouldNotBeReadPermissionError, } = this.state; const fields = @@ -298,7 +298,7 @@ export class FileDataVisualizerView extends Component { {!loading && !loaded && ( )} @@ -310,14 +310,14 @@ export class FileDataVisualizerView extends Component { {fileCouldNotBeRead && loading === false && ( <> - {hasFindFileStructurePermission ? ( + {fileCouldNotBeReadPermissionError ? ( + + ) : ( - ) : ( - )} From 3d3c2c003243cf34f8063e6e2d297d343f4c3f21 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 14:19:37 +0100 Subject: [PATCH 14/16] adding fileUpload:analyzeFile back into ML --- x-pack/plugins/ml/common/types/capabilities.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/ml/common/types/capabilities.ts b/x-pack/plugins/ml/common/types/capabilities.ts index 8bda72adc82ff2..ef8d35e52a9516 100644 --- a/x-pack/plugins/ml/common/types/capabilities.ts +++ b/x-pack/plugins/ml/common/types/capabilities.ts @@ -105,7 +105,7 @@ export function getPluginPrivileges() { return { admin: { ...privilege, - api: allMlCapabilitiesKeys.map((k) => `ml:${k}`), + api: ['fileUpload:analyzeFile', ...allMlCapabilitiesKeys.map((k) => `ml:${k}`)], catalogue: [PLUGIN_ID, `${PLUGIN_ID}_file_data_visualizer`], ui: allMlCapabilitiesKeys, savedObject: { @@ -123,7 +123,7 @@ export function getPluginPrivileges() { }, user: { ...privilege, - api: userMlCapabilitiesKeys.map((k) => `ml:${k}`), + api: ['fileUpload:analyzeFile', ...userMlCapabilitiesKeys.map((k) => `ml:${k}`)], catalogue: [PLUGIN_ID], management: { insightsAndAlerting: [] }, ui: userMlCapabilitiesKeys, From 6e496787c368bfd7ff3aa0a594402c9157906c28 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 14:26:40 +0100 Subject: [PATCH 15/16] updating error text --- .../file_data_visualizer_view/file_error_callouts.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx index f131a2ff176815..62d860c1513e85 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_error_callouts.tsx @@ -163,7 +163,7 @@ export const FindFileStructurePermissionDenied: FC = () => { > From 940f7b1f6a0044d1e1a862f28cb0b63ffe47ee67 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 29 Jun 2021 16:11:17 +0100 Subject: [PATCH 16/16] updating snapshots --- .../features/server/__snapshots__/oss_features.test.ts.snap | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap index e1e5776d87c756..fe5e4fb4f1e0ed 100644 --- a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap +++ b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap @@ -671,6 +671,7 @@ Array [ }, }, "api": Array [ + "fileUpload:analyzeFile", "store_search_session", ], "app": Array [ @@ -1199,6 +1200,7 @@ Array [ }, }, "api": Array [ + "fileUpload:analyzeFile", "store_search_session", ], "app": Array [