wip: going in circles

This commit is contained in:
Torkel Ödegaard
2018-10-01 19:31:03 +02:00
parent b3c78f1265
commit 162a95bff9
2 changed files with 31 additions and 7 deletions

View File

@ -17,6 +17,16 @@ func GetDataSources(c *m.ReqContext) Response {
return Error(500, "Failed to query datasources", err) 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) result := make(dtos.DataSourceList, 0)
for _, ds := range query.Result { for _, ds := range query.Result {
dsItem := dtos.DataSourceListItemDTO{ dsItem := dtos.DataSourceListItemDTO{
@ -35,6 +45,13 @@ func GetDataSources(c *m.ReqContext) Response {
ReadOnly: ds.ReadOnly, 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 { if plugin, exists := plugins.DataSources[ds.Type]; exists {
dsItem.TypeLogoUrl = plugin.Info.Logos.Small dsItem.TypeLogoUrl = plugin.Info.Logos.Small
} else { } else {
@ -49,7 +66,7 @@ func GetDataSources(c *m.ReqContext) Response {
return JSON(200, &result) 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{ query := m.HasRequiredDataSourcePermissionQuery{
Id: dsId, Id: dsId,
User: user, User: user,

View File

@ -190,17 +190,19 @@ type GetDataSourceByNameQuery struct {
// Permissions // Permissions
// --------------------- // ---------------------
type DataSourcePermissionType int type DsPermissionType int
const ( const (
DsPermissionQuery DataSourcePermissionType = 1 << iota DsPermissionQuery DsPermissionType = 1 << iota
DsPermissionAdmin DsPermissionAdmin
DsPermissionNoAccess
) )
func (p DataSourcePermissionType) String() string { func (p DsPermissionType) String() string {
names := map[int]string{ names := map[int]string{
int(DsPermissionQuery): "Query", int(DsPermissionQuery): "Query",
int(DsPermissionAdmin): "Admin", int(DsPermissionAdmin): "Admin",
int(DsPermissionNoAccess): "No Access",
} }
return names[int(p)] return names[int(p)]
} }
@ -208,5 +210,10 @@ func (p DataSourcePermissionType) String() string {
type HasRequiredDataSourcePermissionQuery struct { type HasRequiredDataSourcePermissionQuery struct {
Id int64 Id int64
User *SignedInUser User *SignedInUser
RequiredPermission DataSourcePermissionType RequiredPermission DsPermissionType
}
type GetDataSourcePermissionsForUserQuery struct {
User *SignedInUser
Result map[int64]DsPermissionType
} }