diff --git a/pkg/api/datasources.go b/pkg/api/datasources.go index 3378fb5bf2e..e23f691ca2b 100644 --- a/pkg/api/datasources.go +++ b/pkg/api/datasources.go @@ -17,18 +17,21 @@ func GetDataSources(c *m.ReqContext) Response { return Error(500, "Failed to query datasources", err) } - permissions := map[int64]m.DsPermissionType{} - permissionsQuery := m.GetDataSourcePermissionsForUserQuery{User: c.SignedInUser} - if err := bus.Dispatch(&permissionsQuery); err != nil { + dsFilterQuery := m.DatasourcesPermissionFilterQuery{ + User: c.SignedInUser, + Datasources: query.Result, + } + + if err := bus.Dispatch(&dsFilterQuery); err != nil { if err != bus.ErrHandlerNotFound { - return Error(500, "failed to read datasource permissions", err) + return Error(500, "Could not get datasources", err) } - } else { - permissions = permissionsQuery.Result + + dsFilterQuery.Result = query.Result } result := make(dtos.DataSourceList, 0) - for _, ds := range query.Result { + for _, ds := range dsFilterQuery.Result { dsItem := dtos.DataSourceListItemDTO{ OrgId: ds.OrgId, Id: ds.Id, @@ -45,13 +48,6 @@ func GetDataSources(c *m.ReqContext) Response { ReadOnly: ds.ReadOnly, } - if permission, ok := permissions[ds.Id]; ok { - c.Logger.Info("Found permission", "permission", permission) - if permission == m.DsPermissionNoAccess { - continue - } - } - if plugin, exists := plugins.DataSources[ds.Type]; exists { dsItem.TypeLogoUrl = plugin.Info.Logos.Small } else { diff --git a/pkg/models/datasource.go b/pkg/models/datasource.go index b1648edbb45..488fb2fe1fa 100644 --- a/pkg/models/datasource.go +++ b/pkg/models/datasource.go @@ -217,3 +217,9 @@ type GetDataSourcePermissionsForUserQuery struct { User *SignedInUser Result map[int64]DsPermissionType } + +type DatasourcesPermissionFilterQuery struct { + User *SignedInUser + Datasources []*DataSource + Result []*DataSource +}