dashboard_acl_test.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. Permission: m.PERMISSION_EDIT,
  19. })
  20. So(err, ShouldEqual, m.ErrDashboardAclInfoMissing)
  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. Permission: 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. Permission: 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. setDashAclCmd := m.SetDashboardAclCommand{
  57. OrgId: 1,
  58. UserId: currentUser.Id,
  59. DashboardId: savedFolder.Id,
  60. Permission: m.PERMISSION_EDIT,
  61. }
  62. err := SetDashboardAcl(&setDashAclCmd)
  63. So(err, ShouldBeNil)
  64. So(setDashAclCmd.Result.Id, ShouldEqual, 3)
  65. q1 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  66. err = GetDashboardAclInfoList(q1)
  67. So(err, ShouldBeNil)
  68. So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  69. So(q1.Result[0].Permission, ShouldEqual, m.PERMISSION_EDIT)
  70. So(q1.Result[0].PermissionName, ShouldEqual, "Edit")
  71. So(q1.Result[0].UserId, ShouldEqual, currentUser.Id)
  72. So(q1.Result[0].UserLogin, ShouldEqual, currentUser.Login)
  73. So(q1.Result[0].UserEmail, ShouldEqual, currentUser.Email)
  74. So(q1.Result[0].Id, ShouldEqual, setDashAclCmd.Result.Id)
  75. Convey("Should update hasAcl field to true for dashboard folder and its children", func() {
  76. q2 := &m.GetDashboardsQuery{DashboardIds: []int64{savedFolder.Id, childDash.Id}}
  77. err := GetDashboards(q2)
  78. So(err, ShouldBeNil)
  79. So(q2.Result[0].HasAcl, ShouldBeTrue)
  80. So(q2.Result[1].HasAcl, ShouldBeTrue)
  81. })
  82. Convey("Should be able to update an existing permission", func() {
  83. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  84. OrgId: 1,
  85. UserId: 1,
  86. DashboardId: savedFolder.Id,
  87. Permission: m.PERMISSION_ADMIN,
  88. })
  89. So(err, ShouldBeNil)
  90. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  91. err = GetDashboardAclInfoList(q3)
  92. So(err, ShouldBeNil)
  93. So(len(q3.Result), ShouldEqual, 1)
  94. So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  95. So(q3.Result[0].Permission, ShouldEqual, m.PERMISSION_ADMIN)
  96. So(q3.Result[0].UserId, ShouldEqual, 1)
  97. })
  98. Convey("Should be able to delete an existing permission", func() {
  99. err := RemoveDashboardAcl(&m.RemoveDashboardAclCommand{
  100. OrgId: 1,
  101. AclId: setDashAclCmd.Result.Id,
  102. })
  103. So(err, ShouldBeNil)
  104. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  105. err = GetDashboardAclInfoList(q3)
  106. So(err, ShouldBeNil)
  107. So(len(q3.Result), ShouldEqual, 0)
  108. })
  109. })
  110. Convey("Given a user group", func() {
  111. group1 := m.CreateUserGroupCommand{Name: "group1 name", OrgId: 1}
  112. err := CreateUserGroup(&group1)
  113. So(err, ShouldBeNil)
  114. Convey("Should be able to add a user permission for a user group", func() {
  115. setDashAclCmd := m.SetDashboardAclCommand{
  116. OrgId: 1,
  117. UserGroupId: group1.Result.Id,
  118. DashboardId: savedFolder.Id,
  119. Permission: m.PERMISSION_EDIT,
  120. }
  121. err := SetDashboardAcl(&setDashAclCmd)
  122. So(err, ShouldBeNil)
  123. q1 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  124. err = GetDashboardAclInfoList(q1)
  125. So(err, ShouldBeNil)
  126. So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  127. So(q1.Result[0].Permission, ShouldEqual, m.PERMISSION_EDIT)
  128. So(q1.Result[0].UserGroupId, ShouldEqual, group1.Result.Id)
  129. Convey("Should be able to delete an existing permission for a user group", func() {
  130. err := RemoveDashboardAcl(&m.RemoveDashboardAclCommand{
  131. OrgId: 1,
  132. AclId: setDashAclCmd.Result.Id,
  133. })
  134. So(err, ShouldBeNil)
  135. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  136. err = GetDashboardAclInfoList(q3)
  137. So(err, ShouldBeNil)
  138. So(len(q3.Result), ShouldEqual, 0)
  139. })
  140. })
  141. Convey("Should be able to update an existing permission for a user group", func() {
  142. err := SetDashboardAcl(&m.SetDashboardAclCommand{
  143. OrgId: 1,
  144. UserGroupId: group1.Result.Id,
  145. DashboardId: savedFolder.Id,
  146. Permission: m.PERMISSION_ADMIN,
  147. })
  148. So(err, ShouldBeNil)
  149. q3 := &m.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id}
  150. err = GetDashboardAclInfoList(q3)
  151. So(err, ShouldBeNil)
  152. So(len(q3.Result), ShouldEqual, 1)
  153. So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
  154. So(q3.Result[0].Permission, ShouldEqual, m.PERMISSION_ADMIN)
  155. So(q3.Result[0].UserGroupId, ShouldEqual, group1.Result.Id)
  156. })
  157. })
  158. })
  159. })
  160. }