From 87c3703a0d6e1297af49819577c8f72a9597ec36 Mon Sep 17 00:00:00 2001 From: Ieva Date: Mon, 20 Nov 2023 13:59:02 +0000 Subject: [PATCH] Data sources: show data source menu to users who only have access to create a data source (#78347) * show data source menu to users who only have access to create a data source * return early if missing permissions --- pkg/services/datasources/accesscontrol.go | 2 +- public/app/features/datasources/state/actions.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/services/datasources/accesscontrol.go b/pkg/services/datasources/accesscontrol.go index aae4773e18a..03d88e8e3bd 100644 --- a/pkg/services/datasources/accesscontrol.go +++ b/pkg/services/datasources/accesscontrol.go @@ -26,10 +26,10 @@ var ( // ConfigurationPageAccess is used to protect the "Configure > Data sources" tab access ConfigurationPageAccess = accesscontrol.EvalAny( accesscontrol.EvalPermission(accesscontrol.ActionDatasourcesExplore), + accesscontrol.EvalPermission(ActionCreate), accesscontrol.EvalAll( accesscontrol.EvalPermission(ActionRead), accesscontrol.EvalAny( - accesscontrol.EvalPermission(ActionCreate), accesscontrol.EvalPermission(ActionDelete), accesscontrol.EvalPermission(ActionWrite), ), diff --git a/public/app/features/datasources/state/actions.ts b/public/app/features/datasources/state/actions.ts index fa29b0b2257..294bb87b4f4 100644 --- a/public/app/features/datasources/state/actions.ts +++ b/public/app/features/datasources/state/actions.ts @@ -22,7 +22,7 @@ import { ROUTES as CONNECTIONS_ROUTES } from 'app/features/connections/constants import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import { getPluginSettings } from 'app/features/plugins/pluginSettings'; import { importDataSourcePlugin } from 'app/features/plugins/plugin_loader'; -import { DataSourcePluginCategory, ThunkDispatch, ThunkResult } from 'app/types'; +import { AccessControlAction, DataSourcePluginCategory, ThunkDispatch, ThunkResult } from 'app/types'; import * as api from '../api'; import { DATASOURCES_ROUTES } from '../constants'; @@ -177,6 +177,9 @@ export const testDataSource = ( export function loadDataSources(): ThunkResult> { return async (dispatch) => { + if (!contextSrv.hasPermission(AccessControlAction.DataSourcesRead)) { + return; + } dispatch(dataSourcesLoad()); const response = await api.getDataSources(); dispatch(dataSourcesLoaded(response));