diff --git a/pkg/services/sqlstore/migrations/accesscontrol/datasource_drilldown_removal.go b/pkg/services/sqlstore/migrations/accesscontrol/datasource_drilldown_removal.go new file mode 100644 index 00000000000..3a300d40f70 --- /dev/null +++ b/pkg/services/sqlstore/migrations/accesscontrol/datasource_drilldown_removal.go @@ -0,0 +1,40 @@ +package accesscontrol + +import ( + "fmt" + + "xorm.io/xorm" + + "github.com/grafana/grafana/pkg/services/sqlstore/migrator" +) + +const ( + datasourceDrilldownRemoval = "remove the datasources:drilldown action" +) + +func AddDatasourceDrilldownRemovalMigration(mg *migrator.Migrator) { + mg.AddMigration(datasourceDrilldownRemoval, &datasourceDrilldownRemovalMigrator{}) +} + +type datasourceDrilldownRemovalMigrator struct { + migrator.MigrationBase +} + +func (m *datasourceDrilldownRemovalMigrator) SQL(dialect migrator.Dialect) string { + return CodeMigrationSQL +} + +func (m *datasourceDrilldownRemovalMigrator) Exec(sess *xorm.Session, mg *migrator.Migrator) error { + result, err := sess.Exec("DELETE FROM permission WHERE action = ?", "datasources:drilldown") + if err != nil { + return err + } + rowsAffected, err := result.RowsAffected() + if err != nil { + mg.Logger.Error("Failed to get rows affected by the datasources:drilldown removal", "error", err) + } else { + mg.Logger.Info(fmt.Sprintf("Removed %d datasources:drilldown permissions", rowsAffected)) + } + + return nil +} diff --git a/pkg/services/sqlstore/migrations/migrations.go b/pkg/services/sqlstore/migrations/migrations.go index e17b8924bab..2b7be2663d6 100644 --- a/pkg/services/sqlstore/migrations/migrations.go +++ b/pkg/services/sqlstore/migrations/migrations.go @@ -153,4 +153,6 @@ func (oss *OSSMigrations) AddMigration(mg *Migrator) { ualert.AddAlertRuleMissingSeriesEvalsToResolve(mg) ualert.AddAlertRuleVersionUIDIndex(mg) + + accesscontrol.AddDatasourceDrilldownRemovalMigration(mg) }