grafana/pkg/services/sqlstore/sqlbuilder.go

92 lines
2.2 KiB
Go
Raw Normal View History

2018-02-07 10:54:21 -06:00
package sqlstore
import (
"bytes"
"strings"
"github.com/grafana/grafana/pkg/models"
2018-02-07 10:54:21 -06:00
)
type SQLBuilder struct {
2018-02-07 10:54:21 -06:00
sql bytes.Buffer
params []interface{}
}
func (sb *SQLBuilder) Write(sql string, params ...interface{}) {
sb.sql.WriteString(sql)
if len(params) > 0 {
sb.params = append(sb.params, params...)
}
}
func (sb *SQLBuilder) GetSQLString() string {
return sb.sql.String()
}
func (sb *SQLBuilder) AddParams(params ...interface{}) {
sb.params = append(sb.params, params...)
}
func (sb *SQLBuilder) writeDashboardPermissionFilter(user *models.SignedInUser, permission models.PermissionType) {
if user.OrgRole == models.ROLE_ADMIN {
2018-02-07 10:54:21 -06:00
return
}
okRoles := []interface{}{user.OrgRole}
if user.OrgRole == models.ROLE_EDITOR {
okRoles = append(okRoles, models.ROLE_VIEWER)
2018-02-07 10:54:21 -06:00
}
2018-02-13 09:49:00 -06:00
falseStr := dialect.BooleanStr(false)
2018-02-07 10:54:21 -06:00
sb.sql.WriteString(` AND
(
2018-02-13 09:49:00 -06:00
dashboard.id IN (
SELECT distinct DashboardId from (
SELECT d.id AS DashboardId
FROM dashboard AS d
LEFT JOIN dashboard AS folder on folder.id = d.folder_id
LEFT JOIN dashboard_acl AS da ON
da.dashboard_id = d.id OR
da.dashboard_id = d.folder_id
LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
WHERE
d.org_id = ? AND
da.permission >= ? AND
(
da.user_id = ? OR
ugm.user_id = ? OR
da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `)
)
UNION
SELECT d.id AS DashboardId
FROM dashboard AS d
LEFT JOIN dashboard AS folder on folder.id = d.folder_id
LEFT JOIN dashboard_acl AS da ON
(
-- include default permissions -->
da.org_id = -1 AND (
(folder.id IS NOT NULL AND folder.has_acl = ` + falseStr + `) OR
(folder.id IS NULL AND d.has_acl = ` + falseStr + `)
)
)
WHERE
d.org_id = ? AND
da.permission >= ? AND
(
da.user_id = ? OR
da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `)
)
) AS a
2018-02-07 10:54:21 -06:00
)
)`)
sb.params = append(sb.params, user.OrgId, permission, user.UserId, user.UserId)
2018-02-07 10:54:21 -06:00
sb.params = append(sb.params, okRoles...)
sb.params = append(sb.params, user.OrgId, permission, user.UserId)
sb.params = append(sb.params, okRoles...)
2018-02-07 10:54:21 -06:00
}