LBAC for datasources: Adds UID to LBAC rules (#96522)

* swagger

* update with deprecation notice

* adding caching for teams
This commit is contained in:
Eric Leijonmarck 2024-11-26 16:35:04 +00:00 committed by GitHub
parent d2b6960593
commit 83d050ee1c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,23 +2,31 @@ package teamimpl
import (
"context"
"fmt"
"time"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/localcache"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/services/team"
"github.com/grafana/grafana/pkg/setting"
)
// At package level
const defaultCacheDuration = 5 * time.Minute
type Service struct {
cache *localcache.CacheService
store store
tracer tracing.Tracer
}
func ProvideService(db db.DB, cfg *setting.Cfg, tracer tracing.Tracer) (team.Service, error) {
return &Service{
cache: localcache.New(defaultCacheDuration, 2*defaultCacheDuration),
store: &xormStore{db: db, cfg: cfg, deletes: []string{}},
tracer: tracer,
}, nil
@ -112,7 +120,25 @@ func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int6
attribute.Int64("userID", userID),
))
defer span.End()
return s.store.GetMemberships(ctx, orgID, userID, external)
cacheKey := fmt.Sprintf("teams:%d:%d:%t", orgID, userID, external)
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
}
if len(teams) == 0 {
// Cache empty headers if no teams found
s.cache.Set(cacheKey, []*team.TeamMemberDTO{}, defaultCacheDuration)
return []*team.TeamMemberDTO{}, nil
}
s.cache.Set(cacheKey, teams, defaultCacheDuration)
return teams, nil
}
func (s *Service) GetTeamMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) {