mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
WIP: guardian service for search
Removes restricted dashboards from search result.
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
|
||||
"github.com/grafana/grafana/pkg/bus"
|
||||
m "github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/services/guardian"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
)
|
||||
|
||||
@@ -73,6 +74,11 @@ func searchHandler(query *Query) error {
|
||||
hits = filtered
|
||||
}
|
||||
|
||||
hits, err := removeRestrictedDashboardsFromList(hits, query)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// sort main result array
|
||||
sort.Sort(hits)
|
||||
|
||||
@@ -94,6 +100,29 @@ func searchHandler(query *Query) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func removeRestrictedDashboardsFromList(hits HitList, query *Query) (HitList, error) {
|
||||
var dashboardIds = []int64{}
|
||||
for _, hit := range hits {
|
||||
dashboardIds = append(dashboardIds, hit.Id)
|
||||
}
|
||||
|
||||
filteredHits, err := guardian.RemoveRestrictedDashboards(dashboardIds, query.OrgId, query.UserId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
filtered := HitList{}
|
||||
for _, hit := range hits {
|
||||
for _, dashId := range filteredHits {
|
||||
if hit.Id == dashId {
|
||||
filtered = append(filtered, hit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return filtered, nil
|
||||
}
|
||||
|
||||
func stringInSlice(a string, list []string) bool {
|
||||
for _, b := range list {
|
||||
if b == a {
|
||||
|
||||
@@ -32,6 +32,11 @@ func TestSearch(t *testing.T) {
|
||||
return nil
|
||||
})
|
||||
|
||||
bus.AddHandler("test", func(query *m.GetSignedInUserQuery) error {
|
||||
query.Result = &m.SignedInUser{IsGrafanaAdmin: true}
|
||||
return nil
|
||||
})
|
||||
|
||||
Convey("That is empty", func() {
|
||||
err := searchHandler(&query)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
Reference in New Issue
Block a user