LibraryPanels: Deletes library panels during folder deletion (#31572)

* Refactor: adds permissions for library panel creation

* Refactor: checks folder permissions for patch requests

* Chore: changes after PR comments

* Refactor: adds permissions to delete

* Refactor: moves get all permission tests out of get all tests

* Chore: move out get all tests to a separate file

* Refactor: adds permissions to get handler

* Refactor: fixes a bug with getting library panels in General folder

* Refactor: adds permissions for connect/disconnect

* Refactor: adds permissions and tests for get connected dashboards

* Tests: adds tests for connected dashboards in General Folder

* LibraryPanels: Deletes library panels during folder deletion

* LibraryPanels: Deletes library panels during folder deletion

* Update pkg/api/folder.go

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>

* Update pkg/services/librarypanels/librarypanels_permissions_test.go

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>

* Chore: updates after PR comments

* Chore: forgot to change some function signatures

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
This commit is contained in:
Hugo Häggmark
2021-03-02 10:34:01 +01:00
committed by GitHub
co-authored by Arve Knudsen
parent e13a48166b
commit 4bc6a7c407
7 changed files with 127 additions and 2 deletions
+13 -1
View File
@@ -4,6 +4,8 @@ import (
"errors"
"fmt"
"github.com/grafana/grafana/pkg/services/librarypanels"
"github.com/grafana/grafana/pkg/api/dtos"
"github.com/grafana/grafana/pkg/api/response"
"github.com/grafana/grafana/pkg/models"
@@ -84,8 +86,18 @@ func UpdateFolder(c *models.ReqContext, cmd models.UpdateFolderCommand) response
return response.JSON(200, toFolderDto(g, cmd.Result))
}
func DeleteFolder(c *models.ReqContext) response.Response {
func (hs *HTTPServer) DeleteFolder(c *models.ReqContext) response.Response { // temporarily adding this function to HTTPServer, will be removed from HTTPServer when librarypanels featuretoggle is removed
s := dashboards.NewFolderService(c.OrgId, c.SignedInUser)
if hs.Cfg.IsPanelLibraryEnabled() {
err := hs.LibraryPanelService.DeleteLibraryPanelsInFolder(c, c.Params(":uid"))
if err != nil {
if errors.Is(err, librarypanels.ErrFolderHasConnectedLibraryPanels) {
return response.Error(403, "Folder could not be deleted because it contains linked library panels", err)
}
return toFolderError(err)
}
}
f, err := s.DeleteFolder(c.Params(":uid"))
if err != nil {
return toFolderError(err)