mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
LBAC for datasources: Adds UID to LBAC rules (#96522)
* swagger * update with deprecation notice * adding caching for teams
This commit is contained in:
parent
d2b6960593
commit
83d050ee1c
@ -2,23 +2,31 @@ package teamimpl
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/infra/db"
|
"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/infra/tracing"
|
||||||
"github.com/grafana/grafana/pkg/services/team"
|
"github.com/grafana/grafana/pkg/services/team"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// At package level
|
||||||
|
const defaultCacheDuration = 5 * time.Minute
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
|
cache *localcache.CacheService
|
||||||
store store
|
store store
|
||||||
tracer tracing.Tracer
|
tracer tracing.Tracer
|
||||||
}
|
}
|
||||||
|
|
||||||
func ProvideService(db db.DB, cfg *setting.Cfg, tracer tracing.Tracer) (team.Service, error) {
|
func ProvideService(db db.DB, cfg *setting.Cfg, tracer tracing.Tracer) (team.Service, error) {
|
||||||
return &Service{
|
return &Service{
|
||||||
|
cache: localcache.New(defaultCacheDuration, 2*defaultCacheDuration),
|
||||||
store: &xormStore{db: db, cfg: cfg, deletes: []string{}},
|
store: &xormStore{db: db, cfg: cfg, deletes: []string{}},
|
||||||
tracer: tracer,
|
tracer: tracer,
|
||||||
}, nil
|
}, nil
|
||||||
@ -112,7 +120,25 @@ func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int6
|
|||||||
attribute.Int64("userID", userID),
|
attribute.Int64("userID", userID),
|
||||||
))
|
))
|
||||||
defer span.End()
|
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) {
|
func (s *Service) GetTeamMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user