permissions: broken out func for making creator admin.

This commit is contained in:
Leonard Gram 2019-03-05 16:44:41 +01:00
parent e174f7c20b
commit c8c004095c
5 changed files with 74 additions and 46 deletions

View File

@ -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))

View File

@ -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",

View File

@ -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 {

View 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
}

View File

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