mirror of
https://github.com/grafana/loki.git
synced 2026-03-13 09:33:58 +08:00
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package util //nolint:revive
|
|
|
|
// AllowedTenants that can answer whether tenant is allowed or not based on configuration.
|
|
// Default value (nil) allows all tenants.
|
|
type AllowedTenants struct {
|
|
// If empty, all tenants are enabled. If not empty, only tenants in the map are enabled.
|
|
enabled map[string]struct{}
|
|
|
|
// If empty, no tenants are disabled. If not empty, tenants in the map are disabled.
|
|
disabled map[string]struct{}
|
|
}
|
|
|
|
// NewAllowedTenants builds new allowed tenants based on enabled and disabled tenants.
|
|
// If there are any enabled tenants, then only those tenants are allowed.
|
|
// If there are any disabled tenants, then tenant from that list, that would normally be allowed, is disabled instead.
|
|
func NewAllowedTenants(enabled []string, disabled []string) *AllowedTenants {
|
|
a := &AllowedTenants{}
|
|
|
|
if len(enabled) > 0 {
|
|
a.enabled = make(map[string]struct{}, len(enabled))
|
|
for _, u := range enabled {
|
|
a.enabled[u] = struct{}{}
|
|
}
|
|
}
|
|
|
|
if len(disabled) > 0 {
|
|
a.disabled = make(map[string]struct{}, len(disabled))
|
|
for _, u := range disabled {
|
|
a.disabled[u] = struct{}{}
|
|
}
|
|
}
|
|
|
|
return a
|
|
}
|
|
|
|
func (a *AllowedTenants) IsAllowed(tenantID string) bool {
|
|
if a == nil {
|
|
return true
|
|
}
|
|
|
|
if len(a.enabled) > 0 {
|
|
if _, ok := a.enabled[tenantID]; !ok {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if len(a.disabled) > 0 {
|
|
if _, ok := a.disabled[tenantID]; ok {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|