diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.test.tsx
index 17f0044bbc9d7..e07d39451c3f6 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.test.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.test.tsx
@@ -62,6 +62,11 @@ jest.mock('@kbn/unified-search-plugin/public', () => ({
{'Add Field'}
)}
+ {props.onEditDataView && (
+
+ )}
{props.currentDataViewId}
{props.trigger.label}
@@ -89,7 +94,10 @@ describe('DataViewPicker', () => {
jest.mocked(useKibana).mockReturnValue({
services: {
dataViewFieldEditor: { openEditor: jest.fn() },
- dataViewEditor: { openEditor: jest.fn() },
+ dataViewEditor: {
+ openEditor: jest.fn(),
+ userPermissions: { editDataView: jest.fn().mockReturnValue(true) },
+ },
data: { dataViews: { get: jest.fn() } },
},
} as unknown as ReturnType);
@@ -194,4 +202,34 @@ describe('DataViewPicker', () => {
expect(jest.mocked(useKibana().services.dataViewFieldEditor.openEditor)).toHaveBeenCalled();
});
});
+
+ describe('when user does not have editDataView permission', () => {
+ it('does not render edit data view button', () => {
+ jest
+ .mocked(useKibana().services.dataViewEditor.userPermissions.editDataView)
+ .mockReturnValue(false);
+
+ render(
+
+
+
+ );
+
+ expect(screen.queryByTestId('editDataView')).not.toBeInTheDocument();
+ });
+
+ it('does not render add field button', () => {
+ jest
+ .mocked(useKibana().services.dataViewEditor.userPermissions.editDataView)
+ .mockReturnValue(false);
+
+ render(
+
+
+
+ );
+
+ expect(screen.queryByTestId('addField')).not.toBeInTheDocument();
+ });
+ });
});
diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx
index e083a01046e8f..313b161569028 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx
@@ -46,6 +46,12 @@ export const DataViewPicker = memo(({ scope, onClosePopover, disabled }: DataVie
const {
services: { dataViewEditor, data, dataViewFieldEditor, fieldFormats },
} = useKibana();
+
+ const canEditDataView = useMemo(
+ () => Boolean(dataViewEditor?.userPermissions.editDataView()),
+ [dataViewEditor]
+ );
+
const closeDataViewEditor = useRef<() => void | undefined>();
const closeFieldEditor = useRef<() => void | undefined>();
@@ -117,17 +123,22 @@ export const DataViewPicker = memo(({ scope, onClosePopover, disabled }: DataVie
/**
* Selects data view again. After changes are made to the data view, this results in cache invalidation and will force the reload everywhere.
*/
- const handleDataViewModified = useCallback(
- (updatedDataView: DataView) => {
+ const handleDataViewModified = useMemo(() => {
+ if (!canEditDataView) {
+ return undefined;
+ }
+ return (updatedDataView: DataView) => {
if (!updatedDataView.id) {
return;
}
handleChangeDataView(updatedDataView.id, updatedDataView.getIndexPattern());
- },
- [handleChangeDataView]
- );
+ };
+ }, [canEditDataView, handleChangeDataView]);
- const handleAddField = useCallback(() => editField(undefined, 'add'), [editField]);
+ const handleAddField = useMemo(
+ () => (canEditDataView ? () => editField(undefined, 'add') : undefined),
+ [editField, canEditDataView]
+ );
const triggerConfig = useMemo(() => {
if (status === 'loading') {
diff --git a/x-pack/solutions/security/plugins/security_solution/public/resolver/view/controls/sourcerer_selection.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/resolver/view/controls/sourcerer_selection.test.tsx
index 28c8d5c1d852b..55140a8e53d3f 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/resolver/view/controls/sourcerer_selection.test.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/resolver/view/controls/sourcerer_selection.test.tsx
@@ -55,7 +55,10 @@ describe('SourcererButton', () => {
jest.mocked(useKibana).mockReturnValue({
services: {
dataViewFieldEditor: { openEditor: jest.fn() },
- dataViewEditor: { openEditor: jest.fn() },
+ dataViewEditor: {
+ openEditor: jest.fn(),
+ userPermissions: { editDataView: jest.fn().mockReturnValue(true) },
+ },
data: { dataViews: { get: jest.fn() } },
},
} as unknown as ReturnType);