[ML] Update file data visualizer permissions (#101169)
* [ML] Update file data visualizer permissions * adding home bundle * fixing translations * removing home from bundles * switching to current user for analysis * adding find structure permission check * clean up * updating text * updating maps * removing has_find_file_structure_permission endpoint * removing more code * adding permission error message * renaming variable * adding fileUpload:analyzeFile back into ML * updating error text * updating snapshots Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
c24318ae40
commit
21dad7edb5
|
@ -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,
|
||||
fileCouldNotBeReadPermissionError: false,
|
||||
};
|
||||
|
||||
this.overrides = {};
|
||||
|
@ -87,6 +92,7 @@ export class FileDataVisualizerView extends Component {
|
|||
fileSize: 0,
|
||||
fileTooLarge: false,
|
||||
fileCouldNotBeRead: false,
|
||||
fileCouldNotBeReadPermissionError: false,
|
||||
serverError: null,
|
||||
results: undefined,
|
||||
explanation: undefined,
|
||||
|
@ -182,17 +188,19 @@ export class FileDataVisualizerView extends Component {
|
|||
fileCouldNotBeRead: isRetry,
|
||||
});
|
||||
} catch (error) {
|
||||
const fileCouldNotBeReadPermissionError = error.body.statusCode === 403;
|
||||
this.setState({
|
||||
results: undefined,
|
||||
explanation: undefined,
|
||||
loaded: false,
|
||||
loading: false,
|
||||
fileCouldNotBeRead: true,
|
||||
fileCouldNotBeReadPermissionError,
|
||||
serverError: error,
|
||||
});
|
||||
|
||||
// reload the results with the previous overrides
|
||||
if (isRetry === false) {
|
||||
if (isRetry === false && fileCouldNotBeReadPermissionError === false) {
|
||||
this.setState({
|
||||
loading: true,
|
||||
loaded: false,
|
||||
|
@ -275,6 +283,7 @@ export class FileDataVisualizerView extends Component {
|
|||
isExplanationFlyoutVisible,
|
||||
bottomBarVisible,
|
||||
hasPermissionToImport,
|
||||
fileCouldNotBeReadPermissionError,
|
||||
} = this.state;
|
||||
|
||||
const fields =
|
||||
|
@ -286,7 +295,12 @@ export class FileDataVisualizerView extends Component {
|
|||
<div>
|
||||
{mode === MODE.READ && (
|
||||
<>
|
||||
{!loading && !loaded && <AboutPanel onFilePickerChange={this.onFilePickerChange} />}
|
||||
{!loading && !loaded && (
|
||||
<AboutPanel
|
||||
onFilePickerChange={this.onFilePickerChange}
|
||||
disabled={!fileCouldNotBeReadPermissionError}
|
||||
/>
|
||||
)}
|
||||
|
||||
{loading && <LoadingPanel />}
|
||||
|
||||
|
@ -296,11 +310,15 @@ export class FileDataVisualizerView extends Component {
|
|||
|
||||
{fileCouldNotBeRead && loading === false && (
|
||||
<>
|
||||
<FileCouldNotBeRead
|
||||
error={serverError}
|
||||
loaded={loaded}
|
||||
showEditFlyout={this.showEditFlyout}
|
||||
/>
|
||||
{fileCouldNotBeReadPermissionError ? (
|
||||
<FindFileStructurePermissionDenied />
|
||||
) : (
|
||||
<FileCouldNotBeRead
|
||||
error={serverError}
|
||||
loaded={loaded}
|
||||
showEditFlyout={this.showEditFlyout}
|
||||
/>
|
||||
)}
|
||||
<EuiSpacer size="l" />
|
||||
</>
|
||||
)}
|
||||
|
|
|
@ -146,3 +146,26 @@ export const Explanation: FC<{ error: FindFileStructureErrorResponse }> = ({ err
|
|||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export const FindFileStructurePermissionDenied: FC = () => {
|
||||
return (
|
||||
<>
|
||||
<EuiCallOut
|
||||
title={
|
||||
<FormattedMessage
|
||||
id="xpack.dataVisualizer.file.fileErrorCallouts.findFileStructurePermissionDenied.title"
|
||||
defaultMessage="Permission denied"
|
||||
/>
|
||||
}
|
||||
color="danger"
|
||||
iconType="cross"
|
||||
data-test-subj="dataVisualizerFileStructurePermissionDeniedErrorCallout"
|
||||
>
|
||||
<FormattedMessage
|
||||
id="xpack.dataVisualizer.file.fileErrorCallouts.findFileStructurePermissionDenied.description"
|
||||
defaultMessage="You do not have sufficient privileges to analyze files."
|
||||
/>
|
||||
</EuiCallOut>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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 [
|
||||
|
|
|
@ -37,6 +37,7 @@ export const buildOSSFeatures = ({
|
|||
privileges: {
|
||||
all: {
|
||||
app: ['discover', 'kibana'],
|
||||
api: ['fileUpload:analyzeFile'],
|
||||
catalogue: ['discover'],
|
||||
savedObject: {
|
||||
all: ['search', 'query', 'index-pattern'],
|
||||
|
|
|
@ -141,7 +141,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup<StartDeps, unknown>, logge
|
|||
accepts: ['application/json'],
|
||||
maxBytes: MAX_FILE_SIZE_BYTES,
|
||||
},
|
||||
tags: ['access:fileUpload:import'],
|
||||
},
|
||||
},
|
||||
async (context, request, response) => {
|
||||
|
@ -185,9 +184,6 @@ export function fileUploadRoutes(coreSetup: CoreSetup<StartDeps, unknown>, logge
|
|||
validate: {
|
||||
body: schema.object({ index: schema.string() }),
|
||||
},
|
||||
options: {
|
||||
tags: ['access:fileUpload:import'],
|
||||
},
|
||||
},
|
||||
async (context, request, response) => {
|
||||
try {
|
||||
|
|
|
@ -185,7 +185,6 @@ export class MapsPlugin implements Plugin {
|
|||
catalogue: [APP_ID],
|
||||
privileges: {
|
||||
all: {
|
||||
api: ['fileUpload:import'],
|
||||
app: [APP_ID, 'kibana'],
|
||||
catalogue: [APP_ID],
|
||||
savedObject: {
|
||||
|
|
|
@ -105,11 +105,7 @@ export function getPluginPrivileges() {
|
|||
return {
|
||||
admin: {
|
||||
...privilege,
|
||||
api: [
|
||||
'fileUpload:import',
|
||||
'fileUpload:analyzeFile',
|
||||
...allMlCapabilitiesKeys.map((k) => `ml:${k}`),
|
||||
],
|
||||
api: ['fileUpload:analyzeFile', ...allMlCapabilitiesKeys.map((k) => `ml:${k}`)],
|
||||
catalogue: [PLUGIN_ID, `${PLUGIN_ID}_file_data_visualizer`],
|
||||
ui: allMlCapabilitiesKeys,
|
||||
savedObject: {
|
||||
|
|
Loading…
Reference in a new issue