Browse Source

permissions: broken out func for making creator admin.

Leonard Gram 6 years ago
parent
commit
c8c004095c

+ 1 - 1
pkg/api/api.go

@@ -265,7 +265,7 @@ func (hs *HTTPServer) registerRoutes() {
 		apiRoute.Group("/folders", func(folderRoute routing.RouteRegister) {
 			folderRoute.Get("/", Wrap(GetFolders))
 			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) {
 				folderUidRoute.Get("/", Wrap(GetFolderByUID))

+ 10 - 1
pkg/api/dashboard.go

@@ -213,7 +213,8 @@ func (hs *HTTPServer) PostDashboard(c *m.ReqContext, cmd m.SaveDashboardCommand)
 
 	dash := cmd.GetDashboardModel()
 
-	if dash.Id == 0 && dash.Uid == "" {
+	newDashboard := dash.Id == 0 && dash.Uid == ""
+	if newDashboard {
 		limitReached, err := hs.QuotaService.QuotaReached(c, "dashboard")
 		if err != nil {
 			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)
 	}
 
+	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)
 	return JSON(200, util.DynMap{
 		"status":  "success",

+ 1 - 1
pkg/api/folder.go

@@ -54,7 +54,7 @@ func GetFolderByID(c *m.ReqContext) Response {
 	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)
 	err := s.CreateFolder(&cmd)
 	if err != nil {

+ 62 - 0
pkg/services/dashboards/acl_service.go

@@ -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
+}

+ 0 - 43
pkg/services/dashboards/dashboard_service.go

@@ -238,49 +238,6 @@ func (dr *dashboardServiceImpl) SaveDashboard(dto *SaveDashboardDTO) (*models.Da
 		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
 }