From 71d10a3fa3d976d6d218355522706ea28f7fae16 Mon Sep 17 00:00:00 2001 From: Jo Date: Fri, 24 Oct 2025 11:50:38 +0200 Subject: [PATCH] FolderPermissions: Return 404 error when folder does not exist instead of 500 (#112919) * AccessControl: Improve folder permissions error handling - Add proper error type handling for folder permission checks - Convert dashboards.ErrFolderNotFound to folder.ErrFolderNotFound - Preserve errutil.Error types when returned - Wrap unhandled errors with new ErrFolderUnhandledError for better error tracking * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update pkg/services/accesscontrol/ossaccesscontrol/folder.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../accesscontrol/ossaccesscontrol/folder.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/services/accesscontrol/ossaccesscontrol/folder.go b/pkg/services/accesscontrol/ossaccesscontrol/folder.go index f50c7643c4a..f62b67ce027 100644 --- a/pkg/services/accesscontrol/ossaccesscontrol/folder.go +++ b/pkg/services/accesscontrol/ossaccesscontrol/folder.go @@ -2,8 +2,10 @@ package ossaccesscontrol import ( "context" + "errors" "github.com/grafana/grafana/pkg/api/routing" + "github.com/grafana/grafana/pkg/apimachinery/errutil" "github.com/grafana/grafana/pkg/apimachinery/identity" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/services/accesscontrol" @@ -22,6 +24,8 @@ type FolderPermissionsService struct { *resourcepermissions.Service } +var ErrFolderUnhandledError = errutil.Internal("folder.unhandled-error", errutil.WithPublicMessage("Unhandled folder error")) + var FolderViewActions = []string{dashboards.ActionFoldersRead, accesscontrol.ActionAlertingRuleRead, libraryelements.ActionLibraryPanelsRead, accesscontrol.ActionAlertingSilencesRead} var FolderEditActions = append(FolderViewActions, []string{ dashboards.ActionFoldersWrite, @@ -106,7 +110,16 @@ func ProvideFolderPermissions( }) if err != nil { - return err + switch { + case func() bool { + var errUtilErr errutil.Error + return errors.As(err, &errUtilErr) + }(): + return err + case errors.Is(err, dashboards.ErrFolderNotFound): + return folder.ErrFolderNotFound.Errorf("folder not found") + } + return ErrFolderUnhandledError.Errorf("unhandled folder error: %w", err) } return nil