dashboard_acl_test.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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("When adding dashboard permission with userId and userGroupId set to 0", func() {
  15. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  16. OrgId: 1,
  17. DashboardId: savedFolder.Id,
  18. Permissions: m.PERMISSION_EDIT,
  19. })
  20. So(err, ShouldEqual, m.ErrDashboardPermissionUserOrUserGroupEmpty)
  21. })
  22. Convey("Given dashboard folder permission", func() {
  23. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  24. OrgId: 1,
  25. UserId: currentUser.Id,
  26. DashboardId: savedFolder.Id,
  27. Permissions: m.PERMISSION_EDIT,
  28. })
  29. So(err, ShouldBeNil)
  30. Convey("When reading dashboard acl should include acl for parent folder", func() {
  31. query := m.GetInheritedDashboardAclQuery{OrgId: 1, DashboardId: childDash.Id}
  32. err := GetInheritedDashboardAcl(&query)
  33. So(err, ShouldBeNil)
  34. So(len(query.Result), ShouldEqual, 1)
  35. So(query.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  36. })
  37. Convey("Given child dashboard permission", func() {
  38. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  39. OrgId: 1,
  40. UserId: currentUser.Id,
  41. DashboardId: childDash.Id,
  42. Permissions: m.PERMISSION_EDIT,
  43. })
  44. So(err, ShouldBeNil)
  45. Convey("When reading dashboard acl should include acl for parent folder and child", func() {
  46. query := m.GetInheritedDashboardAclQuery{OrgId: 1, DashboardId: childDash.Id}
  47. err := GetInheritedDashboardAcl(&query)
  48. So(err, ShouldBeNil)
  49. So(len(query.Result), ShouldEqual, 2)
  50. So(query.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  51. So(query.Result[1].DashboardId, ShouldEqual, childDash.Id)
  52. })
  53. })
  54. })
  55. Convey("Should be able to add dashboard permission", func() {
  56. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  57. OrgId: 1,
  58. UserId: currentUser.Id,
  59. DashboardId: savedFolder.Id,
  60. Permissions: m.PERMISSION_EDIT,
  61. })
  62. So(err, ShouldBeNil)
  63. q1 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  64. err = GetDashboardAclInfoList(q1)
  65. So(err, ShouldBeNil)
  66. So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  67. So(q1.Result[0].Permissions, ShouldEqual, m.PERMISSION_EDIT)
  68. So(q1.Result[0].PermissionName, ShouldEqual, "Edit")
  69. So(q1.Result[0].UserId, ShouldEqual, currentUser.Id)
  70. So(q1.Result[0].UserLogin, ShouldEqual, currentUser.Login)
  71. So(q1.Result[0].UserEmail, ShouldEqual, currentUser.Email)
  72. Convey("Should update hasAcl field to true for dashboard folder and its children", func() {
  73. q2 := &m.GetDashboardsQuery{DashboardIds: []int64{savedFolder.Id, childDash.Id}}
  74. err := GetDashboards(q2)
  75. So(err, ShouldBeNil)
  76. So(q2.Result[0].HasAcl, ShouldBeTrue)
  77. So(q2.Result[1].HasAcl, ShouldBeTrue)
  78. })
  79. Convey("Should be able to update an existing permission", func() {
  80. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  81. OrgId: 1,
  82. UserId: 1,
  83. DashboardId: savedFolder.Id,
  84. Permissions: m.PERMISSION_READ_ONLY_EDIT,
  85. })
  86. So(err, ShouldBeNil)
  87. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  88. err = GetDashboardAclInfoList(q3)
  89. So(err, ShouldBeNil)
  90. So(len(q3.Result), ShouldEqual, 1)
  91. So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  92. So(q3.Result[0].Permissions, ShouldEqual, m.PERMISSION_READ_ONLY_EDIT)
  93. So(q3.Result[0].UserId, ShouldEqual, 1)
  94. })
  95. Convey("Should be able to delete an existing permission", func() {
  96. err := RemoveDashboardAcl(&m.RemoveDashboardAclCommand{
  97. OrgId: 1,
  98. AclId: 1,
  99. })
  100. So(err, ShouldBeNil)
  101. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  102. err = GetDashboardAclInfoList(q3)
  103. So(err, ShouldBeNil)
  104. So(len(q3.Result), ShouldEqual, 0)
  105. })
  106. })
  107. Convey("Given a user group", func() {
  108. group1 := m.CreateUserGroupCommand{Name: "group1 name", OrgId: 1}
  109. err := CreateUserGroup(&group1)
  110. So(err, ShouldBeNil)
  111. Convey("Should be able to add a user permission for a user group", func() {
  112. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  113. OrgId: 1,
  114. UserGroupId: group1.Result.Id,
  115. DashboardId: savedFolder.Id,
  116. Permissions: m.PERMISSION_EDIT,
  117. })
  118. So(err, ShouldBeNil)
  119. q1 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  120. err = GetDashboardAclInfoList(q1)
  121. So(err, ShouldBeNil)
  122. So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  123. So(q1.Result[0].Permissions, ShouldEqual, m.PERMISSION_EDIT)
  124. So(q1.Result[0].UserGroupId, ShouldEqual, group1.Result.Id)
  125. })
  126. Convey("Should be able to update an existing permission for a user group", func() {
  127. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  128. OrgId: 1,
  129. UserGroupId: group1.Result.Id,
  130. DashboardId: savedFolder.Id,
  131. Permissions: m.PERMISSION_READ_ONLY_EDIT,
  132. })
  133. So(err, ShouldBeNil)
  134. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  135. err = GetDashboardAclInfoList(q3)
  136. So(err, ShouldBeNil)
  137. So(len(q3.Result), ShouldEqual, 1)
  138. So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  139. So(q3.Result[0].Permissions, ShouldEqual, m.PERMISSION_READ_ONLY_EDIT)
  140. So(q3.Result[0].UserGroupId, ShouldEqual, group1.Result.Id)
  141. })
  142. Convey("Should be able to delete an existing permission for a user group", func() {
  143. err := RemoveDashboardAcl(&m.RemoveDashboardAclCommand{
  144. OrgId: 1,
  145. AclId: 1,
  146. })
  147. So(err, ShouldBeNil)
  148. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  149. err = GetDashboardAclInfoList(q3)
  150. So(err, ShouldBeNil)
  151. So(len(q3.Result), ShouldEqual, 0)
  152. })
  153. })
  154. })
  155. })
  156. }