dashboard_permission.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package api
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/api/dtos"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/services/guardian"
  8. )
  9. func GetDashboardPermissionList(c *m.ReqContext) Response {
  10. dashID := c.ParamsInt64(":dashboardId")
  11. _, rsp := getDashboardHelper(c.OrgId, "", dashID, "")
  12. if rsp != nil {
  13. return rsp
  14. }
  15. g := guardian.New(dashID, c.OrgId, c.SignedInUser)
  16. if canAdmin, err := g.CanAdmin(); err != nil || !canAdmin {
  17. return dashboardGuardianResponse(err)
  18. }
  19. acl, err := g.GetAcl()
  20. if err != nil {
  21. return ApiError(500, "Failed to get dashboard permissions", err)
  22. }
  23. for _, perm := range acl {
  24. if perm.Slug != "" {
  25. perm.Url = m.GetDashboardFolderUrl(perm.IsFolder, perm.Uid, perm.Slug)
  26. }
  27. }
  28. return Json(200, acl)
  29. }
  30. func UpdateDashboardPermissions(c *m.ReqContext, apiCmd dtos.UpdateDashboardAclCommand) Response {
  31. dashID := c.ParamsInt64(":dashboardId")
  32. _, rsp := getDashboardHelper(c.OrgId, "", dashID, "")
  33. if rsp != nil {
  34. return rsp
  35. }
  36. g := guardian.New(dashID, c.OrgId, c.SignedInUser)
  37. if canAdmin, err := g.CanAdmin(); err != nil || !canAdmin {
  38. return dashboardGuardianResponse(err)
  39. }
  40. cmd := m.UpdateDashboardAclCommand{}
  41. cmd.DashboardId = dashID
  42. for _, item := range apiCmd.Items {
  43. cmd.Items = append(cmd.Items, &m.DashboardAcl{
  44. OrgId: c.OrgId,
  45. DashboardId: dashID,
  46. UserId: item.UserId,
  47. TeamId: item.TeamId,
  48. Role: item.Role,
  49. Permission: item.Permission,
  50. Created: time.Now(),
  51. Updated: time.Now(),
  52. })
  53. }
  54. if okToUpdate, err := g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, cmd.Items); err != nil || !okToUpdate {
  55. if err != nil {
  56. if err == guardian.ErrGuardianPermissionExists ||
  57. err == guardian.ErrGuardianOverride {
  58. return ApiError(400, err.Error(), err)
  59. }
  60. return ApiError(500, "Error while checking dashboard permissions", err)
  61. }
  62. return ApiError(403, "Cannot remove own admin permission for a folder", nil)
  63. }
  64. if err := bus.Dispatch(&cmd); err != nil {
  65. if err == m.ErrDashboardAclInfoMissing || err == m.ErrDashboardPermissionDashboardEmpty {
  66. return ApiError(409, err.Error(), err)
  67. }
  68. return ApiError(500, "Failed to create permission", err)
  69. }
  70. return ApiSuccess("Dashboard permissions updated")
  71. }