mirror of https://github.com/grafana/grafana
Team Guardian: Refactor it to remove the bus dependency (#43058)
* Refactor team guardian to avoid to use bus * Fix lint * Fix lintpull/43797/head
parent
f2336fd981
commit
32ed680fc2
@ -0,0 +1,22 @@ |
|||||||
|
package database |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/models" |
||||||
|
"github.com/grafana/grafana/pkg/services/sqlstore" |
||||||
|
) |
||||||
|
|
||||||
|
type TeamGuardianStoreImpl struct{} |
||||||
|
|
||||||
|
func ProvideTeamGuardianStore() *TeamGuardianStoreImpl { |
||||||
|
return &TeamGuardianStoreImpl{} |
||||||
|
} |
||||||
|
|
||||||
|
func (t *TeamGuardianStoreImpl) GetTeamMembers(ctx context.Context, query models.GetTeamMembersQuery) ([]*models.TeamMemberDTO, error) { |
||||||
|
if err := sqlstore.GetTeamMembers(ctx, &query); err != nil { |
||||||
|
return nil, err |
||||||
|
} |
||||||
|
|
||||||
|
return query.Result, nil |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package database |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/models" |
||||||
|
"github.com/stretchr/testify/mock" |
||||||
|
) |
||||||
|
|
||||||
|
type TeamGuardianStoreMock struct { |
||||||
|
mock.Mock |
||||||
|
} |
||||||
|
|
||||||
|
func (t *TeamGuardianStoreMock) GetTeamMembers(ctx context.Context, query models.GetTeamMembersQuery) ([]*models.TeamMemberDTO, error) { |
||||||
|
args := t.Called(ctx, query) |
||||||
|
return args.Get(0).([]*models.TeamMemberDTO), args.Error(1) |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package manager |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/models" |
||||||
|
"github.com/grafana/grafana/pkg/services/teamguardian" |
||||||
|
) |
||||||
|
|
||||||
|
type Service struct { |
||||||
|
store teamguardian.Store |
||||||
|
} |
||||||
|
|
||||||
|
func ProvideService(store teamguardian.Store) *Service { |
||||||
|
return &Service{store: store} |
||||||
|
} |
||||||
|
|
||||||
|
func (s *Service) CanAdmin(ctx context.Context, orgId int64, teamId int64, user *models.SignedInUser) error { |
||||||
|
if user.OrgRole == models.ROLE_ADMIN { |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
if user.OrgId != orgId { |
||||||
|
return models.ErrNotAllowedToUpdateTeamInDifferentOrg |
||||||
|
} |
||||||
|
|
||||||
|
cmd := models.GetTeamMembersQuery{ |
||||||
|
OrgId: orgId, |
||||||
|
TeamId: teamId, |
||||||
|
UserId: user.UserId, |
||||||
|
} |
||||||
|
|
||||||
|
results, err := s.store.GetTeamMembers(ctx, cmd) |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
|
||||||
|
for _, member := range results { |
||||||
|
if member.UserId == user.UserId && member.Permission == models.PERMISSION_ADMIN { |
||||||
|
return nil |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return models.ErrNotAllowedToUpdateTeam |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package manager |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/models" |
||||||
|
"github.com/stretchr/testify/mock" |
||||||
|
) |
||||||
|
|
||||||
|
type TeamGuardianMock struct { |
||||||
|
mock.Mock |
||||||
|
} |
||||||
|
|
||||||
|
func (t *TeamGuardianMock) CanAdmin(ctx context.Context, orgId int64, teamId int64, user *models.SignedInUser) error { |
||||||
|
args := t.Called(ctx, orgId, teamId, user) |
||||||
|
return args.Error(0) |
||||||
|
} |
Loading…
Reference in new issue