sqlbuilder.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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) writeDashboardPermissionFilter(user *m.SignedInUser, permission m.PermissionType) {
  12. if user.OrgRole == m.ROLE_ADMIN {
  13. return
  14. }
  15. okRoles := []interface{}{user.OrgRole}
  16. if user.OrgRole == m.ROLE_EDITOR {
  17. okRoles = append(okRoles, m.ROLE_VIEWER)
  18. }
  19. falseStr := dialect.BooleanStr(false)
  20. sb.sql.WriteString(` AND
  21. (
  22. dashboard.id IN (
  23. SELECT distinct d.id AS DashboardId
  24. FROM dashboard AS d
  25. LEFT JOIN dashboard folder on folder.id = d.folder_id
  26. LEFT JOIN dashboard_acl AS da ON
  27. da.dashboard_id = d.id OR
  28. da.dashboard_id = d.folder_id OR
  29. (
  30. -- include default permissions -->
  31. da.org_id = -1 AND (
  32. (folder.id IS NOT NULL AND folder.has_acl = ` + falseStr + `) OR
  33. (folder.id IS NULL AND d.has_acl = ` + falseStr + `)
  34. )
  35. )
  36. LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
  37. WHERE
  38. d.org_id = ? AND
  39. da.permission >= ? AND
  40. (
  41. da.user_id = ? OR
  42. ugm.user_id = ? OR
  43. da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `)
  44. )
  45. )
  46. )`)
  47. sb.params = append(sb.params, user.OrgId, permission, user.UserId, user.UserId)
  48. sb.params = append(sb.params, okRoles...)
  49. }