|
|
@@ -1,7 +1,6 @@
|
|
|
package sqlstore
|
|
|
|
|
|
import (
|
|
|
- "bytes"
|
|
|
"strings"
|
|
|
|
|
|
m "github.com/grafana/grafana/pkg/models"
|
|
|
@@ -9,6 +8,7 @@ import (
|
|
|
|
|
|
// SearchBuilder is a builder/object mother that builds a dashboard search query
|
|
|
type SearchBuilder struct {
|
|
|
+ SqlBuilder
|
|
|
tags []string
|
|
|
isStarred bool
|
|
|
limit int
|
|
|
@@ -18,8 +18,6 @@ type SearchBuilder struct {
|
|
|
whereTypeFolder bool
|
|
|
whereTypeDash bool
|
|
|
whereFolderIds []int64
|
|
|
- sql bytes.Buffer
|
|
|
- params []interface{}
|
|
|
}
|
|
|
|
|
|
func NewSearchBuilder(signedInUser *m.SignedInUser, limit int) *SearchBuilder {
|
|
|
@@ -176,23 +174,7 @@ func (sb *SearchBuilder) buildSearchWhereClause() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if sb.signedInUser.OrgRole != m.ROLE_ADMIN {
|
|
|
- allowedDashboardsSubQuery := ` AND (dashboard.has_acl = ` + dialect.BooleanStr(false) + ` OR dashboard.id in (
|
|
|
- SELECT distinct d.id AS DashboardId
|
|
|
- FROM dashboard AS d
|
|
|
- LEFT JOIN dashboard_acl as da on d.folder_id = da.dashboard_id or d.id = da.dashboard_id
|
|
|
- LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
|
|
|
- LEFT JOIN org_user ou on ou.role = da.role
|
|
|
- WHERE
|
|
|
- d.has_acl = ` + dialect.BooleanStr(true) + ` and
|
|
|
- (da.user_id = ? or ugm.user_id = ? or ou.id is not null)
|
|
|
- and d.org_id = ?
|
|
|
- )
|
|
|
- )`
|
|
|
-
|
|
|
- sb.sql.WriteString(allowedDashboardsSubQuery)
|
|
|
- sb.params = append(sb.params, sb.signedInUser.UserId, sb.signedInUser.UserId, sb.signedInUser.OrgId)
|
|
|
- }
|
|
|
+ sb.writeDashboardPermissionFilter(sb.signedInUser, m.PERMISSION_VIEW)
|
|
|
|
|
|
if len(sb.whereTitle) > 0 {
|
|
|
sb.sql.WriteString(" AND dashboard.title " + dialect.LikeStr() + " ?")
|