[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:
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user