sqlbuilder.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. // SELECT dash.id, dash.title, dash.folder_id
  20. // FROM dashboard AS dash
  21. // LEFT JOIN dashboard folder on folder.id = dash.folder_id
  22. // LEFT JOIN dashboard_acl AS da ON
  23. // da.dashboard_id = dash.id OR
  24. // da.dashboard_id = dash.folder_id OR
  25. // (
  26. // -- include default permissions -->
  27. // da.org_id = -1 AND (folder.has_acl = 0 OR (dash.has_acl = 0 AND dash.folder_id = 0))
  28. // )
  29. // LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
  30. // WHERE
  31. // dash.org_id = 5 AND
  32. // (
  33. // da.user_id = 8 or
  34. // ugm.user_id = 8 or
  35. // da.role in ('Viewer', 'Editor')
  36. // ) AND
  37. // da.permission > 1
  38. //
  39. sb.sql.WriteString(` AND
  40. (
  41. dashboard.has_acl = ` + dialect.BooleanStr(false) + ` OR
  42. dashboard.id in (
  43. SELECT distinct d.id AS DashboardId
  44. FROM dashboard AS d
  45. LEFT JOIN dashboard_acl as da on d.folder_id = da.dashboard_id or d.id = da.dashboard_id
  46. LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
  47. WHERE
  48. d.has_acl = ` + dialect.BooleanStr(true) + ` AND
  49. d.org_id = ? AND
  50. da.permission >= ? AND
  51. (da.user_id = ? or ugm.user_id = ? or da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `))
  52. )
  53. )`)
  54. sb.params = append(sb.params, user.OrgId, permission, user.UserId, user.UserId)
  55. sb.params = append(sb.params, okRoles...)
  56. }