dashboard_acl.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package sqlstore
  2. import (
  3. "time"
  4. "github.com/go-xorm/xorm"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. )
  8. func init() {
  9. bus.AddHandler("sql", AddOrUpdateDashboardPermission)
  10. bus.AddHandler("sql", GetDashboardPermissions)
  11. }
  12. func AddOrUpdateDashboardPermission(cmd *m.AddOrUpdateDashboardPermissionCommand) error {
  13. return inTransaction(func(sess *xorm.Session) error {
  14. if res, err := sess.Query("SELECT 1 from dashboard_acl WHERE dashboard_id =? and (user_group_id=? or user_id=?)", cmd.DashboardId, cmd.UserGroupId, cmd.UserId); err != nil {
  15. return err
  16. } else if len(res) == 1 {
  17. entity := m.DashboardAcl{
  18. Permissions: cmd.PermissionType,
  19. }
  20. if _, err := sess.Cols("permissions").Where("dashboard_id =? and (user_group_id=? or user_id=?)", cmd.DashboardId, cmd.UserGroupId, cmd.UserId).Update(&entity); err != nil {
  21. return err
  22. }
  23. return nil
  24. }
  25. entity := m.DashboardAcl{
  26. OrgId: cmd.OrgId,
  27. UserGroupId: cmd.UserGroupId,
  28. UserId: cmd.UserId,
  29. Created: time.Now(),
  30. Updated: time.Now(),
  31. DashboardId: cmd.DashboardId,
  32. Permissions: cmd.PermissionType,
  33. }
  34. cols := []string{"org_id", "created", "updated", "dashboard_id", "permissions"}
  35. if cmd.UserId != 0 {
  36. cols = append(cols, "user_id")
  37. }
  38. if cmd.UserGroupId != 0 {
  39. cols = append(cols, "user_group_id")
  40. }
  41. _, err := sess.Cols(cols...).Insert(&entity)
  42. if err != nil {
  43. return err
  44. }
  45. dashboard := m.Dashboard{
  46. HasAcl: true,
  47. }
  48. if _, err := sess.Cols("has_acl").Where("id=? OR parent_id=?", cmd.DashboardId, cmd.DashboardId).Update(&dashboard); err != nil {
  49. return err
  50. }
  51. return nil
  52. })
  53. }
  54. func GetDashboardPermissions(query *m.GetDashboardPermissionsQuery) error {
  55. sess := x.Where("dashboard_id=?", query.DashboardId)
  56. query.Result = make([]*m.DashboardAcl, 0)
  57. return sess.Find(&query.Result)
  58. }