From 975ba0bf8bdefb65617d61b41ace6c2d725c3660 Mon Sep 17 00:00:00 2001 From: maicon Date: Thu, 18 Sep 2025 07:47:54 -0300 Subject: [PATCH] Annotations: avoid IN on getAccessControlFilter if dashboardUID is present (#111213) Annotations: avoid IN on getAccessControlFilter Signed-off-by: Maicon Costa --- .../annotations/annotationsimpl/xorm_store.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/services/annotations/annotationsimpl/xorm_store.go b/pkg/services/annotations/annotationsimpl/xorm_store.go index 92fb80507c7..998236e19ea 100644 --- a/pkg/services/annotations/annotationsimpl/xorm_store.go +++ b/pkg/services/annotations/annotationsimpl/xorm_store.go @@ -12,7 +12,6 @@ import ( "github.com/grafana/grafana/pkg/services/sqlstore/migrations" "github.com/grafana/grafana/pkg/services/sqlstore/migrator" - "github.com/grafana/grafana/pkg/apimachinery/identity" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/services/annotations" @@ -366,7 +365,7 @@ func (r *xormRepositoryImpl) Get(ctx context.Context, query annotations.ItemQuer } } - acFilter, acParams := r.getAccessControlFilter(query.SignedInUser, accessResources) + acFilter, acParams := r.getAccessControlFilter(accessResources, query.DashboardUID) if acFilter != "" { sql.WriteString(fmt.Sprintf(" AND (%s)", acFilter)) } @@ -390,7 +389,7 @@ func (r *xormRepositoryImpl) Get(ctx context.Context, query annotations.ItemQuer return items, err } -func (r *xormRepositoryImpl) getAccessControlFilter(user identity.Requester, accessResources *accesscontrol.AccessResources) (string, []any) { +func (r *xormRepositoryImpl) getAccessControlFilter(accessResources *accesscontrol.AccessResources, dashboardUID string) (string, []any) { if accessResources.SkipAccessControlFilter { return "", nil } @@ -406,9 +405,14 @@ func (r *xormRepositoryImpl) getAccessControlFilter(user identity.Requester, acc if len(accessResources.Dashboards) == 0 { filters = append(filters, "1=0") // empty set } else { - filters = append(filters, fmt.Sprintf("a.dashboard_uid IN (%s)", strings.Repeat("?,", len(accessResources.Dashboards)-1)+"?")) - for uid := range accessResources.Dashboards { - params = append(params, uid) + if dashboardUID != "" { + filters = append(filters, "a.dashboard_uid = ?") + params = append(params, dashboardUID) + } else { + filters = append(filters, fmt.Sprintf("a.dashboard_uid IN (%s)", strings.Repeat("?,", len(accessResources.Dashboards)-1)+"?")) + for uid := range accessResources.Dashboards { + params = append(params, uid) + } } } }