Files
grafana/pkg/services/sqlstore/dashboard_acl_test.go
T

243 lines
8.9 KiB
Go
Raw Normal View History

2017-04-28 21:22:53 +02:00
package sqlstore
import (
"testing"
"github.com/grafana/grafana/pkg/models"
2017-04-28 21:22:53 +02:00
. "github.com/smartystreets/goconvey/convey"
)
func TestDashboardAclDataAccess(t *testing.T) {
Convey("Testing DB", t, func() {
InitTestDB(t)
2017-05-08 15:35:34 +02:00
Convey("Given a dashboard folder and a user", func() {
currentUser := createUser("viewer", "Viewer", false)
2017-04-28 21:22:53 +02:00
savedFolder := insertTestDashboard("1 test dash folder", 1, 0, true, "prod", "webapp")
childDash := insertTestDashboard("2 test dash", 1, savedFolder.Id, false, "prod", "webapp")
2017-12-08 18:25:45 +03:00
Convey("When adding dashboard permission with userId and teamId set to 0", func() {
err := testHelperUpdateDashboardAcl(savedFolder.Id, models.DashboardAcl{
2017-06-17 18:24:38 -04:00
OrgId: 1,
DashboardId: savedFolder.Id,
Permission: models.PERMISSION_EDIT,
})
So(err, ShouldEqual, models.ErrDashboardAclInfoMissing)
})
Convey("Given dashboard folder with default permissions", func() {
2018-04-23 09:23:14 +02:00
Convey("When reading folder acl should include default acl", func() {
query := models.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id, OrgId: 1}
2018-04-23 09:23:14 +02:00
err := GetDashboardAclInfoList(&query)
So(err, ShouldBeNil)
So(len(query.Result), ShouldEqual, 2)
defaultPermissionsId := -1
So(query.Result[0].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[0].Role, ShouldEqual, models.ROLE_VIEWER)
2018-04-23 09:23:14 +02:00
So(query.Result[0].Inherited, ShouldBeFalse)
So(query.Result[1].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[1].Role, ShouldEqual, models.ROLE_EDITOR)
2018-04-23 09:23:14 +02:00
So(query.Result[1].Inherited, ShouldBeFalse)
})
Convey("When reading dashboard acl should include acl for parent folder", func() {
query := models.GetDashboardAclInfoListQuery{DashboardId: childDash.Id, OrgId: 1}
err := GetDashboardAclInfoList(&query)
So(err, ShouldBeNil)
So(len(query.Result), ShouldEqual, 2)
defaultPermissionsId := -1
So(query.Result[0].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[0].Role, ShouldEqual, models.ROLE_VIEWER)
2018-04-23 09:23:14 +02:00
So(query.Result[0].Inherited, ShouldBeTrue)
So(query.Result[1].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[1].Role, ShouldEqual, models.ROLE_EDITOR)
2018-04-23 09:23:14 +02:00
So(query.Result[1].Inherited, ShouldBeTrue)
})
})
2018-02-14 15:04:26 +01:00
Convey("Given dashboard folder with removed default permissions", func() {
err := UpdateDashboardAcl(&models.UpdateDashboardAclCommand{
2018-02-14 15:04:26 +01:00
DashboardId: savedFolder.Id,
Items: []*models.DashboardAcl{},
2018-02-14 15:04:26 +01:00
})
So(err, ShouldBeNil)
Convey("When reading dashboard acl should return no acl items", func() {
query := models.GetDashboardAclInfoListQuery{DashboardId: childDash.Id, OrgId: 1}
2018-02-14 15:04:26 +01:00
err := GetDashboardAclInfoList(&query)
So(err, ShouldBeNil)
So(len(query.Result), ShouldEqual, 0)
})
})
2017-06-19 11:54:37 -04:00
Convey("Given dashboard folder permission", func() {
err := testHelperUpdateDashboardAcl(savedFolder.Id, models.DashboardAcl{
2017-06-19 11:54:37 -04:00
OrgId: 1,
UserId: currentUser.Id,
DashboardId: savedFolder.Id,
Permission: models.PERMISSION_EDIT,
2017-06-19 11:54:37 -04:00
})
So(err, ShouldBeNil)
Convey("When reading dashboard acl should include acl for parent folder", func() {
query := models.GetDashboardAclInfoListQuery{DashboardId: childDash.Id, OrgId: 1}
2017-06-19 11:54:37 -04:00
2017-06-22 17:10:43 -04:00
err := GetDashboardAclInfoList(&query)
2017-06-19 11:54:37 -04:00
So(err, ShouldBeNil)
So(len(query.Result), ShouldEqual, 1)
So(query.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
})
Convey("Given child dashboard permission", func() {
err := testHelperUpdateDashboardAcl(childDash.Id, models.DashboardAcl{
2017-06-19 11:54:37 -04:00
OrgId: 1,
UserId: currentUser.Id,
DashboardId: childDash.Id,
Permission: models.PERMISSION_EDIT,
2017-06-19 11:54:37 -04:00
})
So(err, ShouldBeNil)
Convey("When reading dashboard acl should include acl for parent folder and child", func() {
query := models.GetDashboardAclInfoListQuery{OrgId: 1, DashboardId: childDash.Id}
2017-06-19 11:54:37 -04:00
2017-06-22 17:10:43 -04:00
err := GetDashboardAclInfoList(&query)
2017-06-19 11:54:37 -04:00
So(err, ShouldBeNil)
So(len(query.Result), ShouldEqual, 2)
So(query.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
2018-04-23 09:23:14 +02:00
So(query.Result[0].Inherited, ShouldBeTrue)
2017-06-19 11:54:37 -04:00
So(query.Result[1].DashboardId, ShouldEqual, childDash.Id)
2018-04-23 09:23:14 +02:00
So(query.Result[1].Inherited, ShouldBeFalse)
2017-06-19 11:54:37 -04:00
})
})
})
Convey("Given child dashboard permission in folder with no permissions", func() {
err := testHelperUpdateDashboardAcl(childDash.Id, models.DashboardAcl{
OrgId: 1,
UserId: currentUser.Id,
DashboardId: childDash.Id,
Permission: models.PERMISSION_EDIT,
})
So(err, ShouldBeNil)
Convey("When reading dashboard acl should include default acl for parent folder and the child acl", func() {
query := models.GetDashboardAclInfoListQuery{OrgId: 1, DashboardId: childDash.Id}
err := GetDashboardAclInfoList(&query)
So(err, ShouldBeNil)
defaultPermissionsId := -1
So(len(query.Result), ShouldEqual, 3)
So(query.Result[0].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[0].Role, ShouldEqual, models.ROLE_VIEWER)
2018-04-23 09:23:14 +02:00
So(query.Result[0].Inherited, ShouldBeTrue)
So(query.Result[1].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[1].Role, ShouldEqual, models.ROLE_EDITOR)
2018-04-23 09:23:14 +02:00
So(query.Result[1].Inherited, ShouldBeTrue)
So(query.Result[2].DashboardId, ShouldEqual, childDash.Id)
2018-04-23 09:23:14 +02:00
So(query.Result[2].Inherited, ShouldBeFalse)
})
})
2017-04-28 21:22:53 +02:00
Convey("Should be able to add dashboard permission", func() {
err := testHelperUpdateDashboardAcl(savedFolder.Id, models.DashboardAcl{
2017-06-17 18:24:38 -04:00
OrgId: 1,
UserId: currentUser.Id,
DashboardId: savedFolder.Id,
Permission: models.PERMISSION_EDIT,
2018-02-14 15:04:26 +01:00
})
2018-04-23 19:28:54 +02:00
So(err, ShouldBeNil)
2017-06-21 14:11:16 -04:00
q1 := &models.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id, OrgId: 1}
2017-06-19 17:30:54 -04:00
err = GetDashboardAclInfoList(q1)
2017-04-28 21:22:53 +02:00
So(err, ShouldBeNil)
2017-06-21 14:11:16 -04:00
2017-04-28 21:22:53 +02:00
So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
So(q1.Result[0].Permission, ShouldEqual, models.PERMISSION_EDIT)
2017-06-17 18:24:38 -04:00
So(q1.Result[0].PermissionName, ShouldEqual, "Edit")
2017-05-08 15:35:34 +02:00
So(q1.Result[0].UserId, ShouldEqual, currentUser.Id)
So(q1.Result[0].UserLogin, ShouldEqual, currentUser.Login)
So(q1.Result[0].UserEmail, ShouldEqual, currentUser.Email)
2017-05-03 11:32:21 +02:00
Convey("Should be able to delete an existing permission", func() {
2018-02-14 15:04:26 +01:00
err := testHelperUpdateDashboardAcl(savedFolder.Id)
2017-05-03 11:32:21 +02:00
So(err, ShouldBeNil)
q3 := &models.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id, OrgId: 1}
2017-06-19 17:30:54 -04:00
err = GetDashboardAclInfoList(q3)
2017-05-03 11:32:21 +02:00
So(err, ShouldBeNil)
So(len(q3.Result), ShouldEqual, 0)
})
})
2017-12-08 18:25:45 +03:00
Convey("Given a team", func() {
group1 := models.CreateTeamCommand{Name: "group1 name", OrgId: 1}
2017-12-08 18:25:45 +03:00
err := CreateTeam(&group1)
2017-05-03 11:32:21 +02:00
So(err, ShouldBeNil)
2017-12-08 18:25:45 +03:00
Convey("Should be able to add a user permission for a team", func() {
err := testHelperUpdateDashboardAcl(savedFolder.Id, models.DashboardAcl{
2017-06-17 18:24:38 -04:00
OrgId: 1,
2017-12-11 19:46:05 +03:00
TeamId: group1.Result.Id,
2017-06-17 18:24:38 -04:00
DashboardId: savedFolder.Id,
Permission: models.PERMISSION_EDIT,
2018-02-14 15:04:26 +01:00
})
2017-05-03 11:32:21 +02:00
So(err, ShouldBeNil)
q1 := &models.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id, OrgId: 1}
2017-06-19 17:30:54 -04:00
err = GetDashboardAclInfoList(q1)
2017-05-03 11:32:21 +02:00
So(err, ShouldBeNil)
So(q1.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
So(q1.Result[0].Permission, ShouldEqual, models.PERMISSION_EDIT)
2017-12-08 18:25:45 +03:00
So(q1.Result[0].TeamId, ShouldEqual, group1.Result.Id)
2017-05-03 11:32:21 +02:00
})
2017-12-08 18:25:45 +03:00
Convey("Should be able to update an existing permission for a team", func() {
err := testHelperUpdateDashboardAcl(savedFolder.Id, models.DashboardAcl{
2017-06-17 18:24:38 -04:00
OrgId: 1,
2017-12-11 19:46:05 +03:00
TeamId: group1.Result.Id,
2017-06-17 18:24:38 -04:00
DashboardId: savedFolder.Id,
Permission: models.PERMISSION_ADMIN,
2017-05-03 11:32:21 +02:00
})
So(err, ShouldBeNil)
q3 := &models.GetDashboardAclInfoListQuery{DashboardId: savedFolder.Id, OrgId: 1}
2017-06-19 17:30:54 -04:00
err = GetDashboardAclInfoList(q3)
2017-05-03 11:32:21 +02:00
So(err, ShouldBeNil)
So(len(q3.Result), ShouldEqual, 1)
So(q3.Result[0].DashboardId, ShouldEqual, savedFolder.Id)
So(q3.Result[0].Permission, ShouldEqual, models.PERMISSION_ADMIN)
2017-12-08 18:25:45 +03:00
So(q3.Result[0].TeamId, ShouldEqual, group1.Result.Id)
2017-05-03 11:32:21 +02:00
})
2017-04-28 21:22:53 +02:00
})
})
Convey("Given a root folder", func() {
var rootFolderId int64 = 0
Convey("When reading dashboard acl should return default permissions", func() {
query := models.GetDashboardAclInfoListQuery{DashboardId: rootFolderId, OrgId: 1}
err := GetDashboardAclInfoList(&query)
So(err, ShouldBeNil)
So(len(query.Result), ShouldEqual, 2)
defaultPermissionsId := -1
So(query.Result[0].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[0].Role, ShouldEqual, models.ROLE_VIEWER)
2018-04-23 09:23:14 +02:00
So(query.Result[0].Inherited, ShouldBeFalse)
So(query.Result[1].DashboardId, ShouldEqual, defaultPermissionsId)
So(*query.Result[1].Role, ShouldEqual, models.ROLE_EDITOR)
2018-04-23 09:23:14 +02:00
So(query.Result[1].Inherited, ShouldBeFalse)
})
})
2017-04-28 21:22:53 +02:00
})
}