|
|
|
|
@ -17,6 +17,16 @@ 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 { |
|
|
|
|
if err != bus.ErrHandlerNotFound { |
|
|
|
|
return Error(500, "failed to read datasource permissions", err) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
permissions = permissionsQuery.Result |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
result := make(dtos.DataSourceList, 0) |
|
|
|
|
for _, ds := range query.Result { |
|
|
|
|
dsItem := dtos.DataSourceListItemDTO{ |
|
|
|
|
@ -35,6 +45,13 @@ 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 { |
|
|
|
|
@ -49,7 +66,7 @@ func GetDataSources(c *m.ReqContext) Response { |
|
|
|
|
return JSON(200, &result) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func hasRequiredDatasourcePermission(dsId int64, permission m.DataSourcePermissionType, user *m.SignedInUser) Response { |
|
|
|
|
func hasRequiredDatasourcePermission(dsId int64, permission m.DsPermissionType, user *m.SignedInUser) Response { |
|
|
|
|
query := m.HasRequiredDataSourcePermissionQuery{ |
|
|
|
|
Id: dsId, |
|
|
|
|
User: user, |
|
|
|
|
|