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