mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[Visualizations][Lens] Hide incompatible actions from the panels (#156667)
## Summary Closes https://github.com/elastic/kibana/issues/156119 Closes https://github.com/elastic/kibana/issues/156114 This PR 1. Removes the convert to Lens action if visualize permissions are set to None <img width="467" alt="image" src="https://user-images.githubusercontent.com/17003240/236183482-b6e3cfe9-a77b-44d5-9909-1580c0796db2.png"> 2. Removes the edit actions if visualize permisions are set to None <img width="938" alt="image" src="https://user-images.githubusercontent.com/17003240/236183601-9a715339-2ab7-47d8-8b89-c10bdb03938e.png"> ### Checklist - [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
This commit is contained in:
parent
bc159fdea9
commit
ac18e8a3b0
6 changed files with 46 additions and 5 deletions
|
@ -17,7 +17,13 @@ import { IEmbeddable, ViewMode } from '@kbn/embeddable-plugin/public';
|
|||
import { Action } from '@kbn/ui-actions-plugin/public';
|
||||
import { VisualizeEmbeddable } from '../embeddable';
|
||||
import { DASHBOARD_VISUALIZATION_PANEL_TRIGGER } from '../triggers';
|
||||
import { getUiActions, getApplication, getEmbeddable, getUsageCollection } from '../services';
|
||||
import {
|
||||
getUiActions,
|
||||
getApplication,
|
||||
getEmbeddable,
|
||||
getUsageCollection,
|
||||
getCapabilities,
|
||||
} from '../services';
|
||||
|
||||
export const ACTION_EDIT_IN_LENS = 'ACTION_EDIT_IN_LENS';
|
||||
|
||||
|
@ -116,7 +122,8 @@ export class EditInLensAction implements Action<EditInLensContext> {
|
|||
|
||||
async isCompatible(context: ActionExecutionContext<EditInLensContext>) {
|
||||
const { embeddable } = context;
|
||||
if (!isVisualizeEmbeddable(embeddable)) {
|
||||
const { visualize } = getCapabilities();
|
||||
if (!isVisualizeEmbeddable(embeddable) || !visualize.show) {
|
||||
return false;
|
||||
}
|
||||
const vis = embeddable.getVis();
|
||||
|
|
|
@ -62,6 +62,7 @@ export const createVisEmbeddableFromObject =
|
|||
const capabilities = {
|
||||
visualizeSave: Boolean(getCapabilities().visualize.save),
|
||||
dashboardSave: Boolean(getCapabilities().dashboard?.showWriteControls),
|
||||
visualizeOpen: Boolean(getCapabilities().visualize?.show),
|
||||
};
|
||||
|
||||
return createVisualizeEmbeddableAsync(
|
||||
|
|
|
@ -62,7 +62,7 @@ export interface VisualizeEmbeddableConfiguration {
|
|||
indexPatterns?: DataView[];
|
||||
editPath: string;
|
||||
editUrl: string;
|
||||
capabilities: { visualizeSave: boolean; dashboardSave: boolean };
|
||||
capabilities: { visualizeSave: boolean; dashboardSave: boolean; visualizeOpen: boolean };
|
||||
deps: VisualizeEmbeddableFactoryDeps;
|
||||
}
|
||||
|
||||
|
@ -171,7 +171,9 @@ export class VisualizeEmbeddable
|
|||
|
||||
if (this.attributeService) {
|
||||
const isByValue = !this.inputIsRefType(initialInput);
|
||||
const editable = capabilities.visualizeSave || (isByValue && capabilities.dashboardSave);
|
||||
const editable =
|
||||
capabilities.visualizeSave ||
|
||||
(isByValue && capabilities.dashboardSave && capabilities.visualizeOpen);
|
||||
this.updateOutput({ ...this.getOutput(), editable });
|
||||
}
|
||||
|
||||
|
|
|
@ -166,6 +166,7 @@ describe('embeddable', () => {
|
|||
capabilities: {
|
||||
canSaveDashboards: true,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: true,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
|
@ -361,6 +362,7 @@ describe('embeddable', () => {
|
|||
capabilities: {
|
||||
canSaveDashboards: true,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: true,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
|
@ -413,6 +415,7 @@ describe('embeddable', () => {
|
|||
capabilities: {
|
||||
canSaveDashboards: true,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: true,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
|
@ -940,6 +943,7 @@ describe('embeddable', () => {
|
|||
capabilities: {
|
||||
canSaveDashboards: true,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: true,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
|
@ -1039,6 +1043,7 @@ describe('embeddable', () => {
|
|||
capabilities: {
|
||||
canSaveDashboards: true,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: true,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
|
@ -1135,6 +1140,7 @@ describe('embeddable', () => {
|
|||
capabilities: {
|
||||
canSaveDashboards: true,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: true,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
|
@ -1186,4 +1192,25 @@ describe('embeddable', () => {
|
|||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('should not be editable for no visualize library privileges', async () => {
|
||||
const embeddable = new Embeddable(
|
||||
getEmbeddableProps({
|
||||
capabilities: {
|
||||
canSaveDashboards: false,
|
||||
canSaveVisualizations: true,
|
||||
canOpenVisualizations: false,
|
||||
discover: {},
|
||||
navLinks: {},
|
||||
},
|
||||
}),
|
||||
{
|
||||
timeRange: {
|
||||
from: 'now-15m',
|
||||
to: 'now',
|
||||
},
|
||||
} as LensEmbeddableInput
|
||||
);
|
||||
expect(embeddable.getOutput().editable).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -208,6 +208,7 @@ export interface LensEmbeddableDeps {
|
|||
getTriggerCompatibleActions?: UiActionsStart['getTriggerCompatibleActions'];
|
||||
capabilities: {
|
||||
canSaveVisualizations: boolean;
|
||||
canOpenVisualizations: boolean;
|
||||
canSaveDashboards: boolean;
|
||||
navLinks: Capabilities['navLinks'];
|
||||
discover: Capabilities['discover'];
|
||||
|
@ -1353,7 +1354,9 @@ export class Embeddable
|
|||
private getIsEditable() {
|
||||
return (
|
||||
this.deps.capabilities.canSaveVisualizations ||
|
||||
(!this.inputIsRefType(this.getInput()) && this.deps.capabilities.canSaveDashboards)
|
||||
(!this.inputIsRefType(this.getInput()) &&
|
||||
this.deps.capabilities.canSaveDashboards &&
|
||||
this.deps.capabilities.canOpenVisualizations)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -140,6 +140,7 @@ export class EmbeddableFactory implements EmbeddableFactoryDefinition {
|
|||
capabilities: {
|
||||
canSaveDashboards: Boolean(capabilities.dashboard?.showWriteControls),
|
||||
canSaveVisualizations: Boolean(capabilities.visualize.save),
|
||||
canOpenVisualizations: Boolean(capabilities.visualize.show),
|
||||
navLinks: capabilities.navLinks,
|
||||
discover: capabilities.discover,
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue