From 15a45e8c38ac4b371f700285ca35591f918e3ddf Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 25 Jan 2021 12:25:52 -0700 Subject: [PATCH] [Maps] fix users without access to Maps should not have the option to create them (#88830) * [Maps] fix users without access to Maps should not have the option to create them * fix test message * wrap add geo field trigger in show capabilities check Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/maps/public/plugin.ts | 10 ++- .../apps/maps/visualize_create_menu.js | 82 ++++++++++++------- 2 files changed, 62 insertions(+), 30 deletions(-) diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index 8bffea3ce5a8..690002a77160 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -160,11 +160,19 @@ export class MapsPlugin public start(core: CoreStart, plugins: MapsPluginStartDependencies): MapsStartApi { setLicensingPluginStart(plugins.licensing); - plugins.uiActions.addTriggerAction(VISUALIZE_GEO_FIELD_TRIGGER, visualizeGeoFieldAction); setStartServices(core, plugins); + // unregisters the OSS alias plugins.visualizations.unRegisterAlias(PLUGIN_ID_OSS); + if (core.application.capabilities.maps.show) { + plugins.uiActions.addTriggerAction(VISUALIZE_GEO_FIELD_TRIGGER, visualizeGeoFieldAction); + } + + if (!core.application.capabilities.maps.save) { + plugins.visualizations.unRegisterAlias(APP_ID); + } + return { createLayerDescriptors, registerLayerWizard, diff --git a/x-pack/test/functional/apps/maps/visualize_create_menu.js b/x-pack/test/functional/apps/maps/visualize_create_menu.js index 549901884d39..f58856752dcd 100644 --- a/x-pack/test/functional/apps/maps/visualize_create_menu.js +++ b/x-pack/test/functional/apps/maps/visualize_create_menu.js @@ -12,42 +12,66 @@ export default function ({ getService, getPageObjects }) { const security = getService('security'); describe('visualize create menu', () => { - before(async () => { - await security.testUser.setRoles( - ['test_logstash_reader', 'global_maps_all', 'geoshape_data_reader', 'global_visualize_all'], - false - ); + describe('maps visualize alias', () => { + describe('with write permission', () => { + before(async () => { + await security.testUser.setRoles(['global_maps_all', 'global_visualize_all'], false); - await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.navigateToNewVisualization(); + }); + + it('should show maps application in create menu', async () => { + const hasMapsApp = await PageObjects.visualize.hasMapsApp(); + expect(hasMapsApp).to.equal(true); + }); + + it('should take users to Maps application when Maps is clicked', async () => { + await PageObjects.visualize.clickMapsApp(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.maps.waitForLayersToLoad(); + const doesLayerExist = await PageObjects.maps.doesLayerExist('Road map'); + expect(doesLayerExist).to.equal(true); + }); + }); + + describe('without write permission', () => { + before(async () => { + await security.testUser.setRoles(['global_maps_read', 'global_visualize_all'], false); + + await PageObjects.visualize.navigateToNewVisualization(); + }); + + after(async () => { + await security.testUser.restoreDefaults(); + }); + + it('should not show maps application in create menu', async () => { + const hasMapsApp = await PageObjects.visualize.hasMapsApp(); + expect(hasMapsApp).to.equal(false); + }); + }); }); - after(async () => { - await security.testUser.restoreDefaults(); - }); + describe('aggregion based visualizations', () => { + before(async () => { + await security.testUser.setRoles(['global_visualize_all'], false); - it('should show maps application in create menu', async () => { - const hasMapsApp = await PageObjects.visualize.hasMapsApp(); - expect(hasMapsApp).to.equal(true); - }); + await PageObjects.visualize.navigateToNewAggBasedVisualization(); + }); - it('should not show legacy region map visualizion in create menu', async () => { - await PageObjects.visualize.clickAggBasedVisualizations(); - const hasLegecyViz = await PageObjects.visualize.hasRegionMap(); - expect(hasLegecyViz).to.equal(false); - }); + after(async () => { + await security.testUser.restoreDefaults(); + }); - it('should not show legacy tilemap map visualizion in create menu', async () => { - const hasLegecyViz = await PageObjects.visualize.hasTileMap(); - expect(hasLegecyViz).to.equal(false); - }); + it('should not show legacy region map visualizion in create menu', async () => { + const hasLegecyViz = await PageObjects.visualize.hasRegionMap(); + expect(hasLegecyViz).to.equal(false); + }); - it('should take users to Maps application when Maps is clicked', async () => { - await PageObjects.visualize.goBackToGroups(); - await PageObjects.visualize.clickMapsApp(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - const doesLayerExist = await PageObjects.maps.doesLayerExist('Road map'); - expect(doesLayerExist).to.equal(true); + it('should not show legacy tilemap map visualizion in create menu', async () => { + const hasLegecyViz = await PageObjects.visualize.hasTileMap(); + expect(hasLegecyViz).to.equal(false); + }); }); }); }