diff --git a/pkg/services/ngalert/api.go b/pkg/services/ngalert/api.go index 28143cd3679..a4305328af6 100644 --- a/pkg/services/ngalert/api.go +++ b/pkg/services/ngalert/api.go @@ -17,14 +17,14 @@ import ( func (ng *AlertNG) registerAPIEndpoints() { ng.RouteRegister.Group("/api/alert-definitions", func(alertDefinitions routing.RouteRegister) { alertDefinitions.Get("", middleware.ReqSignedIn, routing.Wrap(ng.listAlertDefinitions)) - alertDefinitions.Get("/eval/:alertDefinitionUID", ng.validateOrgAlertDefinition, routing.Wrap(ng.alertDefinitionEvalEndpoint)) + alertDefinitions.Get("/eval/:alertDefinitionUID", middleware.ReqSignedIn, ng.validateOrgAlertDefinition, routing.Wrap(ng.alertDefinitionEvalEndpoint)) alertDefinitions.Post("/eval", middleware.ReqSignedIn, binding.Bind(evalAlertConditionCommand{}), routing.Wrap(ng.conditionEvalEndpoint)) - alertDefinitions.Get("/:alertDefinitionUID", ng.validateOrgAlertDefinition, routing.Wrap(ng.getAlertDefinitionEndpoint)) - alertDefinitions.Delete("/:alertDefinitionUID", ng.validateOrgAlertDefinition, routing.Wrap(ng.deleteAlertDefinitionEndpoint)) - alertDefinitions.Post("/", middleware.ReqSignedIn, binding.Bind(saveAlertDefinitionCommand{}), routing.Wrap(ng.createAlertDefinitionEndpoint)) - alertDefinitions.Put("/:alertDefinitionUID", ng.validateOrgAlertDefinition, binding.Bind(updateAlertDefinitionCommand{}), routing.Wrap(ng.updateAlertDefinitionEndpoint)) - alertDefinitions.Post("/pause", ng.validateOrgAlertDefinition, binding.Bind(updateAlertDefinitionPausedCommand{}), routing.Wrap(ng.alertDefinitionPauseEndpoint)) - alertDefinitions.Post("/unpause", ng.validateOrgAlertDefinition, binding.Bind(updateAlertDefinitionPausedCommand{}), routing.Wrap(ng.alertDefinitionUnpauseEndpoint)) + alertDefinitions.Get("/:alertDefinitionUID", middleware.ReqSignedIn, ng.validateOrgAlertDefinition, routing.Wrap(ng.getAlertDefinitionEndpoint)) + alertDefinitions.Delete("/:alertDefinitionUID", middleware.ReqEditorRole, ng.validateOrgAlertDefinition, routing.Wrap(ng.deleteAlertDefinitionEndpoint)) + alertDefinitions.Post("/", middleware.ReqEditorRole, binding.Bind(saveAlertDefinitionCommand{}), routing.Wrap(ng.createAlertDefinitionEndpoint)) + alertDefinitions.Put("/:alertDefinitionUID", middleware.ReqEditorRole, ng.validateOrgAlertDefinition, binding.Bind(updateAlertDefinitionCommand{}), routing.Wrap(ng.updateAlertDefinitionEndpoint)) + alertDefinitions.Post("/pause", middleware.ReqEditorRole, binding.Bind(updateAlertDefinitionPausedCommand{}), routing.Wrap(ng.alertDefinitionPauseEndpoint)) + alertDefinitions.Post("/unpause", middleware.ReqEditorRole, binding.Bind(updateAlertDefinitionPausedCommand{}), routing.Wrap(ng.alertDefinitionUnpauseEndpoint)) }) ng.RouteRegister.Group("/api/ngalert/", func(schedulerRouter routing.RouteRegister) { diff --git a/pkg/services/ngalert/database.go b/pkg/services/ngalert/database.go index aededd4c552..3edf08a58fb 100644 --- a/pkg/services/ngalert/database.go +++ b/pkg/services/ngalert/database.go @@ -224,6 +224,9 @@ func (ng *AlertNG) getAlertDefinitions(query *listAlertDefinitionsQuery) error { func (ng *AlertNG) updateAlertDefinitionPaused(cmd *updateAlertDefinitionPausedCommand) error { return ng.SQLStore.WithDbSession(context.Background(), func(sess *sqlstore.DBSession) error { + if len(cmd.UIDs) == 0 { + return nil + } placeHolders := strings.Builder{} const separator = ", " separatorVar := separator diff --git a/pkg/services/ngalert/middleware.go b/pkg/services/ngalert/middleware.go index 77566d3c213..066a18da013 100644 --- a/pkg/services/ngalert/middleware.go +++ b/pkg/services/ngalert/middleware.go @@ -6,15 +6,11 @@ import ( func (ng *AlertNG) validateOrgAlertDefinition(c *models.ReqContext) { uid := c.ParamsEscape(":alertDefinitionUID") + query := getAlertDefinitionByUIDQuery{UID: uid, OrgID: c.SignedInUser.OrgId} if err := ng.getAlertDefinitionByUID(&query); err != nil { c.JsonApiErr(404, "Alert definition not found", nil) return } - - if c.OrgId != query.Result.OrgID { - c.JsonApiErr(403, "You are not allowed to edit/view alert definition", nil) - return - } }