82 lines
2.5 KiB
Go
82 lines
2.5 KiB
Go
package zanzana
|
|
|
|
import (
|
|
dashboardalpha1 "github.com/grafana/grafana/pkg/apis/dashboard/v0alpha1"
|
|
folderalpha1 "github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
|
)
|
|
|
|
const (
|
|
roleGrafanaAdmin = "Grafana Admin"
|
|
roleAdmin = "Admin"
|
|
roleEditor = "Editor"
|
|
roleViewer = "Viewer"
|
|
roleNone = "None"
|
|
)
|
|
|
|
var basicRolesTranslations = map[string]string{
|
|
roleGrafanaAdmin: "basic_grafana_admin",
|
|
roleAdmin: "basic_admin",
|
|
roleEditor: "basic_editor",
|
|
roleViewer: "basic_viewer",
|
|
roleNone: "basic_none",
|
|
}
|
|
|
|
type resourceTranslation struct {
|
|
typ string
|
|
group string
|
|
resource string
|
|
mapping map[string]actionMappig
|
|
}
|
|
|
|
type actionMappig struct {
|
|
relation string
|
|
group string
|
|
resource string
|
|
subresource string
|
|
}
|
|
|
|
func newMapping(relation, subresource string) actionMappig {
|
|
return newScopedMapping(relation, "", "", subresource)
|
|
}
|
|
|
|
func newScopedMapping(relation, group, resource, subresource string) actionMappig {
|
|
return actionMappig{relation, group, resource, subresource}
|
|
}
|
|
|
|
var (
|
|
folderGroup = folderalpha1.FolderResourceInfo.GroupResource().Group
|
|
folderResource = folderalpha1.FolderResourceInfo.GroupResource().Resource
|
|
|
|
dashboardGroup = dashboardalpha1.DashboardResourceInfo.GroupResource().Group
|
|
dashboardResource = dashboardalpha1.DashboardResourceInfo.GroupResource().Resource
|
|
)
|
|
|
|
var resourceTranslations = map[string]resourceTranslation{
|
|
KindFolders: {
|
|
typ: TypeFolder,
|
|
group: folderGroup,
|
|
resource: folderResource,
|
|
mapping: map[string]actionMappig{
|
|
"folders:read": newMapping(RelationGet, ""),
|
|
"folders:write": newMapping(RelationUpdate, ""),
|
|
"folders:create": newMapping(RelationCreate, ""),
|
|
"folders:delete": newMapping(RelationDelete, ""),
|
|
"dashboards:read": newScopedMapping(RelationGet, dashboardGroup, dashboardResource, ""),
|
|
"dashboards:write": newScopedMapping(RelationUpdate, dashboardGroup, dashboardResource, ""),
|
|
"dashboards:create": newScopedMapping(RelationCreate, dashboardGroup, dashboardResource, ""),
|
|
"dashboards:delete": newScopedMapping(RelationDelete, dashboardGroup, dashboardResource, ""),
|
|
},
|
|
},
|
|
KindDashboards: {
|
|
typ: TypeResource,
|
|
group: dashboardGroup,
|
|
resource: dashboardResource,
|
|
mapping: map[string]actionMappig{
|
|
"dashboards:read": newMapping(RelationGet, ""),
|
|
"dashboards:write": newMapping(RelationUpdate, ""),
|
|
"dashboards:create": newMapping(RelationCreate, ""),
|
|
"dashboards:delete": newMapping(RelationDelete, ""),
|
|
},
|
|
},
|
|
}
|