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
pull/78407/head
Ieva 2 years ago committed by GitHub
parent 72db9739c7
commit 87c3703a0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      pkg/services/datasources/accesscontrol.go
  2. 5
      public/app/features/datasources/state/actions.ts

@ -26,10 +26,10 @@ var (
// ConfigurationPageAccess is used to protect the "Configure > Data sources" tab access // ConfigurationPageAccess is used to protect the "Configure > Data sources" tab access
ConfigurationPageAccess = accesscontrol.EvalAny( ConfigurationPageAccess = accesscontrol.EvalAny(
accesscontrol.EvalPermission(accesscontrol.ActionDatasourcesExplore), accesscontrol.EvalPermission(accesscontrol.ActionDatasourcesExplore),
accesscontrol.EvalPermission(ActionCreate),
accesscontrol.EvalAll( accesscontrol.EvalAll(
accesscontrol.EvalPermission(ActionRead), accesscontrol.EvalPermission(ActionRead),
accesscontrol.EvalAny( accesscontrol.EvalAny(
accesscontrol.EvalPermission(ActionCreate),
accesscontrol.EvalPermission(ActionDelete), accesscontrol.EvalPermission(ActionDelete),
accesscontrol.EvalPermission(ActionWrite), accesscontrol.EvalPermission(ActionWrite),
), ),

@ -22,7 +22,7 @@ import { ROUTES as CONNECTIONS_ROUTES } from 'app/features/connections/constants
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
import { getPluginSettings } from 'app/features/plugins/pluginSettings'; import { getPluginSettings } from 'app/features/plugins/pluginSettings';
import { importDataSourcePlugin } from 'app/features/plugins/plugin_loader'; 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 * as api from '../api';
import { DATASOURCES_ROUTES } from '../constants'; import { DATASOURCES_ROUTES } from '../constants';
@ -177,6 +177,9 @@ export const testDataSource = (
export function loadDataSources(): ThunkResult<Promise<void>> { export function loadDataSources(): ThunkResult<Promise<void>> {
return async (dispatch) => { return async (dispatch) => {
if (!contextSrv.hasPermission(AccessControlAction.DataSourcesRead)) {
return;
}
dispatch(dataSourcesLoad()); dispatch(dataSourcesLoad());
const response = await api.getDataSources(); const response = await api.getDataSources();
dispatch(dataSourcesLoaded(response)); dispatch(dataSourcesLoaded(response));

Loading…
Cancel
Save