AUTHZ: add option to bypass team membership cache (#111968)

add option to bypass team membership cache
This commit is contained in:
Cory Forseth 2025-10-03 10:22:19 -05:00 committed by GitHub
parent 43be84076c
commit 02fb28a478
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 8 deletions

View File

@ -19,7 +19,7 @@ type Service interface {
GetTeamIDsByUser(ctx context.Context, query *GetTeamIDsByUserQuery) ([]int64, error)
IsTeamMember(ctx context.Context, orgId int64, teamId int64, userId int64) (bool, error)
RemoveUsersMemberships(tx context.Context, userID int64) error
GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*TeamMemberDTO, error)
GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool, bypassCache bool) ([]*TeamMemberDTO, error)
GetTeamMembers(ctx context.Context, query *GetTeamMembersQuery) ([]*TeamMemberDTO, error)
RegisterDelete(query string)
}

View File

@ -114,19 +114,21 @@ func (s *Service) RemoveUsersMemberships(ctx context.Context, userID int64) erro
return s.store.RemoveUsersMemberships(ctx, userID)
}
func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*team.TeamMemberDTO, error) {
func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool, bypassCache bool) ([]*team.TeamMemberDTO, error) {
ctx, span := s.tracer.Start(ctx, "team.GetUserTeamMemberships", trace.WithAttributes(
attribute.Int64("orgID", orgID),
attribute.Int64("userID", userID),
))
defer span.End()
cacheKey := fmt.Sprintf("teams:%d:%d:%t", orgID, userID, external)
if !bypassCache {
if cached, found := s.cache.Get(cacheKey); found {
if teams, ok := cached.([]*team.TeamMemberDTO); ok {
return teams, nil
}
s.cache.Delete(cacheKey)
}
}
teams, err := s.store.GetMemberships(ctx, orgID, userID, external)
if err != nil {
return nil, err
@ -137,7 +139,9 @@ func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int6
return []*team.TeamMemberDTO{}, nil
}
if !bypassCache {
s.cache.Set(cacheKey, teams, defaultCacheDuration)
}
return teams, nil
}

View File

@ -58,7 +58,7 @@ func (s *FakeService) RemoveUsersMemberships(ctx context.Context, userID int64)
return s.ExpectedError
}
func (s *FakeService) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*team.TeamMemberDTO, error) {
func (s *FakeService) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool, bypassCache bool) ([]*team.TeamMemberDTO, error) {
return s.ExpectedMembers, s.ExpectedError
}