| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711 |
- package guardian
- import (
- "fmt"
- "testing"
- "github.com/grafana/grafana/pkg/bus"
- m "github.com/grafana/grafana/pkg/models"
- . "github.com/smartystreets/goconvey/convey"
- )
- func TestGuardian(t *testing.T) {
- Convey("Guardian permission tests", t, func() {
- orgRoleScenario("Given user has admin org role", m.ROLE_ADMIN, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeTrue)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- Convey("When trying to update permissions", func() {
- Convey("With duplicate user permissions should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: m.PERMISSION_VIEW},
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianPermissionExists)
- })
- Convey("With duplicate team permissions should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, TeamId: 1, Permission: m.PERMISSION_VIEW},
- {OrgId: 1, DashboardId: 1, TeamId: 1, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianPermissionExists)
- })
- Convey("With duplicate everyone with editor role permission should return error", func() {
- r := m.ROLE_EDITOR
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_VIEW},
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianPermissionExists)
- })
- Convey("With duplicate everyone with viewer role permission should return error", func() {
- r := m.ROLE_VIEWER
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_VIEW},
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianPermissionExists)
- })
- Convey("With everyone with admin role permission should return error", func() {
- r := m.ROLE_ADMIN
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianPermissionExists)
- })
- })
- Convey("Given default permissions", func() {
- editor := m.ROLE_EDITOR
- viewer := m.ROLE_VIEWER
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: -1, Role: &editor, Permission: m.PERMISSION_EDIT},
- {OrgId: 1, DashboardId: -1, Role: &viewer, Permission: m.PERMISSION_VIEW},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions without everyone with role editor can edit should be allowed", func() {
- r := m.ROLE_VIEWER
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_VIEW},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions without everyone with role viewer can view should be allowed", func() {
- r := m.ROLE_EDITOR
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, Role: &r, Permission: m.PERMISSION_EDIT},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- })
- Convey("Given parent folder has user admin permission", func() {
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with admin user permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with edit user permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_EDIT},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with view user permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has user edit permission", func() {
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, UserId: 1, Permission: m.PERMISSION_EDIT},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with admin user permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with edit user permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_EDIT},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with view user permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has user view permission", func() {
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, UserId: 1, Permission: m.PERMISSION_VIEW},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with admin user permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with edit user permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_EDIT},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with view user permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, UserId: 1, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has team admin permission", func() {
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, TeamId: 1, Permission: m.PERMISSION_ADMIN},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with admin team permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_ADMIN},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with edit team permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_EDIT},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with view team permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has team edit permission", func() {
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, TeamId: 1, Permission: m.PERMISSION_EDIT},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with admin team permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with edit team permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_EDIT},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with view team permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has team view permission", func() {
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, TeamId: 1, Permission: m.PERMISSION_VIEW},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with admin team permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with edit team permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_EDIT},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with view team permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, TeamId: 1, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has editor role with edit permission", func() {
- r := m.ROLE_EDITOR
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, Role: &r, Permission: m.PERMISSION_EDIT},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with everyone with editor role can admin permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, Role: &r, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with everyone with editor role can edit permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, Role: &r, Permission: m.PERMISSION_EDIT},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- Convey("When trying to update dashboard permissions with everyone with editor role can view permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, Role: &r, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- Convey("Given parent folder has editor role with view permission", func() {
- r := m.ROLE_EDITOR
- existingPermissions := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 2, Role: &r, Permission: m.PERMISSION_VIEW},
- }
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = existingPermissions
- return nil
- })
- Convey("When trying to update dashboard permissions with everyone with viewer role can admin permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, Role: &r, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with everyone with viewer role can edit permission should be allowed", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, Role: &r, Permission: m.PERMISSION_EDIT},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeTrue)
- })
- Convey("When trying to update dashboard permissions with everyone with viewer role can view permission should return error", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 3, Role: &r, Permission: m.PERMISSION_VIEW},
- }
- _, err := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(err, ShouldEqual, ErrGuardianOverride)
- })
- })
- })
- orgRoleScenario("Given user has editor org role", m.ROLE_EDITOR, func(sc *scenarioContext) {
- everyoneWithRoleScenario(m.ROLE_EDITOR, m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeTrue)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- everyoneWithRoleScenario(m.ROLE_EDITOR, m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- everyoneWithRoleScenario(m.ROLE_EDITOR, m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeTrue)
- })
- everyoneWithRoleScenario(m.ROLE_VIEWER, m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeFalse)
- })
- everyoneWithRoleScenario(m.ROLE_VIEWER, m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeFalse)
- })
- everyoneWithRoleScenario(m.ROLE_VIEWER, m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeFalse)
- })
- userWithPermissionScenario(m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeTrue)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- userWithPermissionScenario(m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- userWithPermissionScenario(m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeTrue)
- })
- teamWithPermissionScenario(m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeTrue)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- teamWithPermissionScenario(m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- teamWithPermissionScenario(m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeTrue)
- })
- Convey("When trying to update permissions should return false", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: m.PERMISSION_VIEW},
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeFalse)
- })
- })
- orgRoleScenario("Given user has viewer org role", m.ROLE_VIEWER, func(sc *scenarioContext) {
- everyoneWithRoleScenario(m.ROLE_EDITOR, m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeFalse)
- })
- everyoneWithRoleScenario(m.ROLE_EDITOR, m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeFalse)
- })
- everyoneWithRoleScenario(m.ROLE_EDITOR, m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeFalse)
- })
- everyoneWithRoleScenario(m.ROLE_VIEWER, m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeTrue)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- everyoneWithRoleScenario(m.ROLE_VIEWER, m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- everyoneWithRoleScenario(m.ROLE_VIEWER, m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeTrue)
- })
- userWithPermissionScenario(m.PERMISSION_ADMIN, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeTrue)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- userWithPermissionScenario(m.PERMISSION_EDIT, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeTrue)
- So(canSave, ShouldBeTrue)
- So(canView, ShouldBeTrue)
- })
- userWithPermissionScenario(m.PERMISSION_VIEW, sc, func(sc *scenarioContext) {
- canAdmin, _ := sc.g.CanAdmin()
- canEdit, _ := sc.g.CanEdit()
- canSave, _ := sc.g.CanSave()
- canView, _ := sc.g.CanView()
- So(canAdmin, ShouldBeFalse)
- So(canEdit, ShouldBeFalse)
- So(canSave, ShouldBeFalse)
- So(canView, ShouldBeTrue)
- })
- Convey("When trying to update permissions should return false", func() {
- p := []*m.DashboardAcl{
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: m.PERMISSION_VIEW},
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: m.PERMISSION_ADMIN},
- }
- ok, _ := sc.g.CheckPermissionBeforeUpdate(m.PERMISSION_ADMIN, p)
- So(ok, ShouldBeFalse)
- })
- })
- })
- }
- type scenarioContext struct {
- g DashboardGuardian
- }
- type scenarioFunc func(c *scenarioContext)
- func orgRoleScenario(desc string, role m.RoleType, fn scenarioFunc) {
- user := &m.SignedInUser{
- UserId: 1,
- OrgId: 1,
- OrgRole: role,
- }
- guard := New(1, 1, user)
- sc := &scenarioContext{
- g: guard,
- }
- Convey(desc, func() {
- fn(sc)
- })
- }
- func permissionScenario(desc string, sc *scenarioContext, permissions []*m.DashboardAclInfoDTO, fn scenarioFunc) {
- bus.ClearBusHandlers()
- bus.AddHandler("test", func(query *m.GetDashboardAclInfoListQuery) error {
- query.Result = permissions
- return nil
- })
- teams := []*m.Team{}
- for _, p := range permissions {
- if p.TeamId > 0 {
- teams = append(teams, &m.Team{Id: p.TeamId})
- }
- }
- bus.AddHandler("test", func(query *m.GetTeamsByUserQuery) error {
- query.Result = teams
- return nil
- })
- Convey(desc, func() {
- fn(sc)
- })
- }
- func userWithPermissionScenario(permission m.PermissionType, sc *scenarioContext, fn scenarioFunc) {
- p := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 1, UserId: 1, Permission: permission},
- }
- permissionScenario(fmt.Sprintf("and user has permission to %s item", permission), sc, p, fn)
- }
- func teamWithPermissionScenario(permission m.PermissionType, sc *scenarioContext, fn scenarioFunc) {
- p := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 1, TeamId: 1, Permission: permission},
- }
- permissionScenario(fmt.Sprintf("and team has permission to %s item", permission), sc, p, fn)
- }
- func everyoneWithRoleScenario(role m.RoleType, permission m.PermissionType, sc *scenarioContext, fn scenarioFunc) {
- p := []*m.DashboardAclInfoDTO{
- {OrgId: 1, DashboardId: 1, UserId: -1, Role: &role, Permission: permission},
- }
- permissionScenario(fmt.Sprintf("and everyone with %s role can %s item", role, permission), sc, p, fn)
- }
|