dashboard_acl.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/bus"
  4. "github.com/grafana/grafana/pkg/middleware"
  5. m "github.com/grafana/grafana/pkg/models"
  6. "github.com/grafana/grafana/pkg/services/guardian"
  7. "github.com/grafana/grafana/pkg/util"
  8. )
  9. func GetDashboardAcl(c *middleware.Context) Response {
  10. dashboardId := c.ParamsInt64(":id")
  11. hasPermission, err := guardian.CanViewAcl(dashboardId, c.OrgRole, c.IsGrafanaAdmin, c.OrgId, c.UserId)
  12. if err != nil {
  13. return ApiError(500, "Failed to get Dashboard ACL", err)
  14. }
  15. if !hasPermission {
  16. return Json(403, util.DynMap{"status": "Forbidden", "message": "Does not have access to this Dashboard ACL"})
  17. }
  18. query := m.GetDashboardPermissionsQuery{DashboardId: dashboardId}
  19. if err := bus.Dispatch(&query); err != nil {
  20. return ApiError(500, "Failed to get Dashboard ACL", err)
  21. }
  22. return Json(200, &query.Result)
  23. }
  24. func DeleteDashboardAclByUser(c *middleware.Context) Response {
  25. dashboardId := c.ParamsInt64(":id")
  26. userId := c.ParamsInt64(":userId")
  27. cmd := m.RemoveDashboardPermissionCommand{DashboardId: dashboardId, UserId: userId, OrgId: c.OrgId}
  28. hasPermission, err := guardian.CanDeleteFromAcl(dashboardId, c.OrgRole, c.IsGrafanaAdmin, c.OrgId, c.UserId)
  29. if err != nil {
  30. return ApiError(500, "Failed to delete from Dashboard ACL", err)
  31. }
  32. if !hasPermission {
  33. return Json(403, util.DynMap{"status": "Forbidden", "message": "Does not have access to this Dashboard ACL"})
  34. }
  35. if err := bus.Dispatch(&cmd); err != nil {
  36. return ApiError(500, "Failed to delete permission for user", err)
  37. }
  38. return Json(200, "")
  39. }
  40. func DeleteDashboardAclByUserGroup(c *middleware.Context) Response {
  41. dashboardId := c.ParamsInt64(":id")
  42. userGroupId := c.ParamsInt64(":userGroupId")
  43. cmd := m.RemoveDashboardPermissionCommand{DashboardId: dashboardId, UserGroupId: userGroupId, OrgId: c.OrgId}
  44. hasPermission, err := guardian.CanDeleteFromAcl(dashboardId, c.OrgRole, c.IsGrafanaAdmin, c.OrgId, c.UserId)
  45. if err != nil {
  46. return ApiError(500, "Failed to delete from Dashboard ACL", err)
  47. }
  48. if !hasPermission {
  49. return Json(403, util.DynMap{"status": "Forbidden", "message": "Does not have access to this Dashboard ACL"})
  50. }
  51. if err := bus.Dispatch(&cmd); err != nil {
  52. return ApiError(500, "Failed to delete permission for user", err)
  53. }
  54. return Json(200, "")
  55. }