diff --git a/pkg/services/accesscontrol/models.go b/pkg/services/accesscontrol/models.go index 9c09c77ae9f..d772acf8153 100644 --- a/pkg/services/accesscontrol/models.go +++ b/pkg/services/accesscontrol/models.go @@ -455,6 +455,7 @@ const ( ActionAlertingReceiversCreate = "alert.notifications.receivers:create" ActionAlertingReceiversUpdate = "alert.notifications.receivers:write" ActionAlertingReceiversDelete = "alert.notifications.receivers:delete" + ActionAlertingReceiversTest = "alert.notifications.receivers:test" ActionAlertingReceiversPermissionsRead = "receivers.permissions:read" ActionAlertingReceiversPermissionsWrite = "receivers.permissions:write" diff --git a/pkg/services/ngalert/accesscontrol.go b/pkg/services/ngalert/accesscontrol.go index 94ce4069160..1dad2138a87 100644 --- a/pkg/services/ngalert/accesscontrol.go +++ b/pkg/services/ngalert/accesscontrol.go @@ -136,6 +136,7 @@ var ( Group: AlertRolesGroup, Permissions: []accesscontrol.Permission{ {Action: accesscontrol.ActionAlertingReceiversCreate}, + {Action: accesscontrol.ActionAlertingReceiversTest}, }, }, } diff --git a/pkg/services/ngalert/api/authorization.go b/pkg/services/ngalert/api/authorization.go index e0d77de1a16..f9b14ad7eea 100644 --- a/pkg/services/ngalert/api/authorization.go +++ b/pkg/services/ngalert/api/authorization.go @@ -212,9 +212,15 @@ func (api *API) authorize(method, path string) web.Handler { case http.MethodGet + "/api/alertmanager/grafana/config/api/v1/receivers": eval = ac.EvalPermission(ac.ActionAlertingNotificationsRead) case http.MethodPost + "/api/alertmanager/grafana/config/api/v1/receivers/test": - eval = ac.EvalPermission(ac.ActionAlertingNotificationsWrite) + eval = ac.EvalAny( + ac.EvalPermission(ac.ActionAlertingNotificationsWrite), + ac.EvalPermission(ac.ActionAlertingReceiversTest), + ) case http.MethodPost + "/api/alertmanager/grafana/config/api/v1/templates/test": - eval = ac.EvalPermission(ac.ActionAlertingNotificationsWrite) + eval = ac.EvalAny( + ac.EvalPermission(ac.ActionAlertingNotificationsWrite), + ac.EvalPermission(ac.ActionAlertingNotificationsTemplatesRead), + ) // External Alertmanager Paths case http.MethodDelete + "/api/alertmanager/{DatasourceUID}/config/api/v1/alerts":