sqlbuilder.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package sqlstore
  2. import (
  3. "bytes"
  4. "strings"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. type SqlBuilder struct {
  8. sql bytes.Buffer
  9. params []interface{}
  10. }
  11. func (sb *SqlBuilder) Write(sql string, params ...interface{}) {
  12. sb.sql.WriteString(sql)
  13. if len(params) > 0 {
  14. sb.params = append(sb.params, params...)
  15. }
  16. }
  17. func (sb *SqlBuilder) GetSqlString() string {
  18. return sb.sql.String()
  19. }
  20. func (sb *SqlBuilder) AddParams(params ...interface{}) {
  21. sb.params = append(sb.params, params...)
  22. }
  23. func (sb *SqlBuilder) writeDashboardPermissionFilter(user *m.SignedInUser, permission m.PermissionType) {
  24. if user.OrgRole == m.ROLE_ADMIN {
  25. return
  26. }
  27. okRoles := []interface{}{user.OrgRole}
  28. if user.OrgRole == m.ROLE_EDITOR {
  29. okRoles = append(okRoles, m.ROLE_VIEWER)
  30. }
  31. falseStr := dialect.BooleanStr(false)
  32. sb.sql.WriteString(` AND
  33. (
  34. dashboard.id IN (
  35. SELECT distinct d.id AS DashboardId
  36. FROM dashboard AS d
  37. LEFT JOIN dashboard folder on folder.id = d.folder_id
  38. LEFT JOIN dashboard_acl AS da ON
  39. da.dashboard_id = d.id OR
  40. da.dashboard_id = d.folder_id OR
  41. (
  42. -- include default permissions -->
  43. da.org_id = -1 AND (
  44. (folder.id IS NOT NULL AND folder.has_acl = ` + falseStr + `) OR
  45. (folder.id IS NULL AND d.has_acl = ` + falseStr + `)
  46. )
  47. )
  48. LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
  49. WHERE
  50. d.org_id = ? AND
  51. da.permission >= ? AND
  52. (
  53. da.user_id = ? OR
  54. ugm.user_id = ? OR
  55. da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `)
  56. )
  57. )
  58. )`)
  59. sb.params = append(sb.params, user.OrgId, permission, user.UserId, user.UserId)
  60. sb.params = append(sb.params, okRoles...)
  61. }