[release-12.1.3] Annotations: avoid IN on getAccessControlFilter if dashboardUID is present (#111781)

Annotations: avoid IN on getAccessControlFilter if dashboardUID is present (#111213)

Annotations: avoid IN on getAccessControlFilter


(cherry picked from commit 975ba0bf8b)

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
Co-authored-by: maicon <maiconscosta@gmail.com>
This commit is contained in:
grafana-delivery-bot[bot]
2025-09-29 21:59:33 +00:00
committed by GitHub
co-authored by maicon
parent a90f47ef46
commit 99f1af1779
@@ -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)
}
}
}
}