mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
permissions: broken out func for making creator admin.
This commit is contained in:
parent
e174f7c20b
commit
c8c004095c
@ -265,7 +265,7 @@ func (hs *HTTPServer) registerRoutes() {
|
|||||||
apiRoute.Group("/folders", func(folderRoute routing.RouteRegister) {
|
apiRoute.Group("/folders", func(folderRoute routing.RouteRegister) {
|
||||||
folderRoute.Get("/", Wrap(GetFolders))
|
folderRoute.Get("/", Wrap(GetFolders))
|
||||||
folderRoute.Get("/id/:id", Wrap(GetFolderByID))
|
folderRoute.Get("/id/:id", Wrap(GetFolderByID))
|
||||||
folderRoute.Post("/", bind(m.CreateFolderCommand{}), Wrap(CreateFolder))
|
folderRoute.Post("/", bind(m.CreateFolderCommand{}), Wrap(hs.CreateFolder))
|
||||||
|
|
||||||
folderRoute.Group("/:uid", func(folderUidRoute routing.RouteRegister) {
|
folderRoute.Group("/:uid", func(folderUidRoute routing.RouteRegister) {
|
||||||
folderUidRoute.Get("/", Wrap(GetFolderByUID))
|
folderUidRoute.Get("/", Wrap(GetFolderByUID))
|
||||||
|
@ -213,7 +213,8 @@ func (hs *HTTPServer) PostDashboard(c *m.ReqContext, cmd m.SaveDashboardCommand)
|
|||||||
|
|
||||||
dash := cmd.GetDashboardModel()
|
dash := cmd.GetDashboardModel()
|
||||||
|
|
||||||
if dash.Id == 0 && dash.Uid == "" {
|
newDashboard := dash.Id == 0 && dash.Uid == ""
|
||||||
|
if newDashboard {
|
||||||
limitReached, err := hs.QuotaService.QuotaReached(c, "dashboard")
|
limitReached, err := hs.QuotaService.QuotaReached(c, "dashboard")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Error(500, "failed to get quota", err)
|
return Error(500, "failed to get quota", err)
|
||||||
@ -276,6 +277,14 @@ func (hs *HTTPServer) PostDashboard(c *m.ReqContext, cmd m.SaveDashboardCommand)
|
|||||||
return Error(500, "Failed to save dashboard", err)
|
return Error(500, "Failed to save dashboard", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if hs.Cfg.EditorsCanOwn && newDashboard {
|
||||||
|
aclService := dashboards.NewAclService()
|
||||||
|
err := aclService.MakeUserAdmin(cmd.OrgId, cmd.UserId, dashboard.Id)
|
||||||
|
if err != nil {
|
||||||
|
hs.log.Error("Could not make user admin", "error", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.TimeRequest(metrics.M_Api_Dashboard_Save)
|
c.TimeRequest(metrics.M_Api_Dashboard_Save)
|
||||||
return JSON(200, util.DynMap{
|
return JSON(200, util.DynMap{
|
||||||
"status": "success",
|
"status": "success",
|
||||||
|
@ -54,7 +54,7 @@ func GetFolderByID(c *m.ReqContext) Response {
|
|||||||
return JSON(200, toFolderDto(g, folder))
|
return JSON(200, toFolderDto(g, folder))
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateFolder(c *m.ReqContext, cmd m.CreateFolderCommand) Response {
|
func (hs *HTTPServer) CreateFolder(c *m.ReqContext, cmd m.CreateFolderCommand) Response {
|
||||||
s := dashboards.NewFolderService(c.OrgId, c.SignedInUser)
|
s := dashboards.NewFolderService(c.OrgId, c.SignedInUser)
|
||||||
err := s.CreateFolder(&cmd)
|
err := s.CreateFolder(&cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
62
pkg/services/dashboards/acl_service.go
Normal file
62
pkg/services/dashboards/acl_service.go
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package dashboards
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/grafana/grafana/pkg/bus"
|
||||||
|
"github.com/grafana/grafana/pkg/log"
|
||||||
|
"github.com/grafana/grafana/pkg/models"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewService factory for creating a new dashboard service
|
||||||
|
var NewAclService = func() *AclService {
|
||||||
|
return &AclService{
|
||||||
|
log: log.New("dashboard-acl-service"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type AclService struct {
|
||||||
|
log log.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func (as *AclService) MakeUserAdmin(orgId int64, userId int64, dashboardId int64) error {
|
||||||
|
rtEditor := models.ROLE_EDITOR
|
||||||
|
rtViewer := models.ROLE_VIEWER
|
||||||
|
|
||||||
|
items := []*models.DashboardAcl{
|
||||||
|
{
|
||||||
|
OrgId: orgId,
|
||||||
|
DashboardId: dashboardId,
|
||||||
|
UserId: userId,
|
||||||
|
Permission: models.PERMISSION_ADMIN,
|
||||||
|
Created: time.Now(),
|
||||||
|
Updated: time.Now(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
OrgId: orgId,
|
||||||
|
DashboardId: dashboardId,
|
||||||
|
Role: &rtEditor,
|
||||||
|
Permission: models.PERMISSION_EDIT,
|
||||||
|
Created: time.Now(),
|
||||||
|
Updated: time.Now(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
OrgId: orgId,
|
||||||
|
DashboardId: dashboardId,
|
||||||
|
Role: &rtViewer,
|
||||||
|
Permission: models.PERMISSION_VIEW,
|
||||||
|
Created: time.Now(),
|
||||||
|
Updated: time.Now(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
aclCmd := &models.UpdateDashboardAclCommand{
|
||||||
|
DashboardId: dashboardId,
|
||||||
|
Items: items,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := bus.Dispatch(aclCmd); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
@ -238,49 +238,6 @@ func (dr *dashboardServiceImpl) SaveDashboard(dto *SaveDashboardDTO) (*models.Da
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: check if dashboard exists already. could have id set but not exist
|
|
||||||
if dto.Dashboard.Id == 0 && dto.Dashboard.Uid == "" {
|
|
||||||
rtEditor := models.ROLE_EDITOR
|
|
||||||
rtViewer := models.ROLE_VIEWER
|
|
||||||
|
|
||||||
items := []*models.DashboardAcl{
|
|
||||||
{
|
|
||||||
OrgId: dr.orgId,
|
|
||||||
DashboardId: cmd.Result.Id,
|
|
||||||
UserId: cmd.Result.CreatedBy,
|
|
||||||
Permission: models.PERMISSION_ADMIN,
|
|
||||||
Created: time.Now(),
|
|
||||||
Updated: time.Now(),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
OrgId: dr.orgId,
|
|
||||||
DashboardId: cmd.Result.Id,
|
|
||||||
Role: &rtEditor,
|
|
||||||
Permission: models.PERMISSION_EDIT,
|
|
||||||
Created: time.Now(),
|
|
||||||
Updated: time.Now(),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
OrgId: dr.orgId,
|
|
||||||
DashboardId: cmd.Result.Id,
|
|
||||||
Role: &rtViewer,
|
|
||||||
Permission: models.PERMISSION_VIEW,
|
|
||||||
Created: time.Now(),
|
|
||||||
Updated: time.Now(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
aclCmd := &models.UpdateDashboardAclCommand{
|
|
||||||
DashboardId: cmd.Result.Id,
|
|
||||||
Items: items,
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = bus.Dispatch(aclCmd); err != nil {
|
|
||||||
return cmd.Result, err
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return cmd.Result, nil
|
return cmd.Result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user