diff --git a/packages/grafana-runtime/src/config.ts b/packages/grafana-runtime/src/config.ts index 30719098512..0e28eb5831a 100644 --- a/packages/grafana-runtime/src/config.ts +++ b/packages/grafana-runtime/src/config.ts @@ -203,10 +203,7 @@ export class GrafanaBootConfig implements GrafanaConfig { systemDateFormats.update(this.dateFormats); } - if (this.buildInfo.env === 'development') { - overrideFeatureTogglesFromUrl(this); - } - + overrideFeatureTogglesFromUrl(this); overrideFeatureTogglesFromLocalStorage(this); if (this.featureToggles.disableAngular) { @@ -243,11 +240,28 @@ function overrideFeatureTogglesFromUrl(config: GrafanaBootConfig) { return; } + const isLocalDevEnv = config.buildInfo.env === 'development'; + + const prodUrlAllowedFeatureFlags = new Set([ + 'autoMigrateOldPanels', + 'autoMigrateGraphPanel', + 'autoMigrateTablePanel', + 'autoMigratePiechartPanel', + 'autoMigrateWorldmapPanel', + 'autoMigrateStatPanel', + 'disableAngular', + ]); + const params = new URLSearchParams(window.location.search); params.forEach((value, key) => { if (key.startsWith('__feature.')) { const featureToggles = config.featureToggles as Record; const featureName = key.substring(10); + + if (!isLocalDevEnv && !prodUrlAllowedFeatureFlags.has(featureName)) { + return; + } + const toggleState = value === 'true' || value === ''; // browser rewrites true as '' if (toggleState !== featureToggles[key]) { featureToggles[featureName] = toggleState;