dashboard_acl_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package sqlstore
  2. import (
  3. "testing"
  4. . "github.com/smartystreets/goconvey/convey"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. func TestDashboardAclDataAccess(t *testing.T) {
  8. Convey("Testing DB", t, func() {
  9. InitTestDB(t)
  10. Convey("Given a dashboard folder and a user", func() {
  11. currentUser := createUser("viewer", "Viewer", false)
  12. savedFolder := insertTestDashboard("1 test dash folder", 1, 0, true, "prod", "webapp")
  13. childDash := insertTestDashboard("2 test dash", 1, savedFolder.Id, false, "prod", "webapp")
  14. Convey("Should be able to add dashboard permission", func() {
  15. err := AddOrUpdateDashboardPermission(&m.AddOrUpdateDashboardPermissionCommand{
  16. OrgId: 1,
  17. UserId: currentUser.Id,
  18. DashboardId: savedFolder.Id,
  19. PermissionType: m.PERMISSION_EDIT,
  20. })
  21. So(err, ShouldBeNil)
  22. q1 := &m.GetDashboardPermissionsQuery{DashboardId: savedFolder.Id}
  23. err = GetDashboardPermissions(q1)
  24. So(err, ShouldBeNil)
  25. So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  26. So(q1.Result[0].PermissionType, ShouldEqual, m.PERMISSION_EDIT)
  27. So(q1.Result[0].Permissions, ShouldEqual, "Edit")
  28. So(q1.Result[0].UserId, ShouldEqual, currentUser.Id)
  29. So(q1.Result[0].UserLogin, ShouldEqual, currentUser.Login)
  30. So(q1.Result[0].UserEmail, ShouldEqual, currentUser.Email)
  31. Convey("Should update hasAcl field to true for dashboard folder and its children", func() {
  32. q2 := &m.GetDashboardsQuery{DashboardIds: []int64{savedFolder.Id, childDash.Id}}
  33. err := GetDashboards(q2)
  34. So(err, ShouldBeNil)
  35. So(q2.Result[0].HasAcl, ShouldBeTrue)
  36. So(q2.Result[1].HasAcl, ShouldBeTrue)
  37. })
  38. Convey("Should be able to update an existing permission", func() {
  39. err := AddOrUpdateDashboardPermission(&m.AddOrUpdateDashboardPermissionCommand{
  40. OrgId: 1,
  41. UserId: 1,
  42. DashboardId: savedFolder.Id,
  43. PermissionType: m.PERMISSION_READ_ONLY_EDIT,
  44. })
  45. So(err, ShouldBeNil)
  46. q3 := &m.GetDashboardPermissionsQuery{DashboardId: savedFolder.Id}
  47. err = GetDashboardPermissions(q3)
  48. So(err, ShouldBeNil)
  49. So(len(q3.Result), ShouldEqual, 1)
  50. So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  51. So(q3.Result[0].PermissionType, ShouldEqual, m.PERMISSION_READ_ONLY_EDIT)
  52. So(q3.Result[0].UserId, ShouldEqual, 1)
  53. })
  54. Convey("Should be able to delete an existing permission", func() {
  55. err := RemoveDashboardPermission(&m.RemoveDashboardPermissionCommand{
  56. OrgId: 1,
  57. UserId: 1,
  58. DashboardId: savedFolder.Id,
  59. })
  60. So(err, ShouldBeNil)
  61. q3 := &m.GetDashboardPermissionsQuery{DashboardId: savedFolder.Id}
  62. err = GetDashboardPermissions(q3)
  63. So(err, ShouldBeNil)
  64. So(len(q3.Result), ShouldEqual, 0)
  65. })
  66. })
  67. Convey("Given a user group", func() {
  68. group1 := m.CreateUserGroupCommand{Name: "group1 name", OrgId: 1}
  69. err := CreateUserGroup(&group1)
  70. So(err, ShouldBeNil)
  71. Convey("Should be able to add a user permission for a user group", func() {
  72. err := AddOrUpdateDashboardPermission(&m.AddOrUpdateDashboardPermissionCommand{
  73. OrgId: 1,
  74. UserGroupId: group1.Result.Id,
  75. DashboardId: savedFolder.Id,
  76. PermissionType: m.PERMISSION_EDIT,
  77. })
  78. So(err, ShouldBeNil)
  79. q1 := &m.GetDashboardPermissionsQuery{DashboardId: savedFolder.Id}
  80. err = GetDashboardPermissions(q1)
  81. So(err, ShouldBeNil)
  82. So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  83. So(q1.Result[0].PermissionType, ShouldEqual, m.PERMISSION_EDIT)
  84. So(q1.Result[0].UserGroupId, ShouldEqual, group1.Result.Id)
  85. })
  86. Convey("Should be able to update an existing permission for a user group", func() {
  87. err := AddOrUpdateDashboardPermission(&m.AddOrUpdateDashboardPermissionCommand{
  88. OrgId: 1,
  89. UserGroupId: group1.Result.Id,
  90. DashboardId: savedFolder.Id,
  91. PermissionType: m.PERMISSION_READ_ONLY_EDIT,
  92. })
  93. So(err, ShouldBeNil)
  94. q3 := &m.GetDashboardPermissionsQuery{DashboardId: savedFolder.Id}
  95. err = GetDashboardPermissions(q3)
  96. So(err, ShouldBeNil)
  97. So(len(q3.Result), ShouldEqual, 1)
  98. So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  99. So(q3.Result[0].PermissionType, ShouldEqual, m.PERMISSION_READ_ONLY_EDIT)
  100. So(q3.Result[0].UserGroupId, ShouldEqual, group1.Result.Id)
  101. })
  102. Convey("Should be able to delete an existing permission for a user group", func() {
  103. err := RemoveDashboardPermission(&m.RemoveDashboardPermissionCommand{
  104. OrgId: 1,
  105. UserGroupId: group1.Result.Id,
  106. DashboardId: savedFolder.Id,
  107. })
  108. So(err, ShouldBeNil)
  109. q3 := &m.GetDashboardPermissionsQuery{DashboardId: savedFolder.Id}
  110. err = GetDashboardPermissions(q3)
  111. So(err, ShouldBeNil)
  112. So(len(q3.Result), ShouldEqual, 0)
  113. })
  114. })
  115. })
  116. })
  117. }