RBAC: Add origin column to seed_assignment (#80326)

* RBAC: Add origin column to seed_assignment

* Add OnCall permission migration
This commit is contained in:
Gabriel MABILLE 2024-01-11 18:43:43 +01:00 committed by GitHub
parent c40b2f90ba
commit c9ac069076
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 0 deletions

View File

@ -60,6 +60,22 @@ func ToRegistrations(pluginID, pluginName string, regs []plugins.RoleRegistratio
return res
}
// PluginIDFromName extracts the plugin ID from the role name
func PluginIDFromName(roleName string) string {
if !strings.HasPrefix(roleName, ac.PluginRolePrefix) {
return ""
}
pluginID := strings.Builder{}
for _, c := range roleName[len(ac.PluginRolePrefix):] {
if c == ':' {
break
}
pluginID.WriteRune(c)
}
return pluginID.String()
}
func roleName(pluginID, roleName string) string {
return fmt.Sprintf("%v%v:%v", ac.PluginRolePrefix, pluginID, strings.Replace(strings.ToLower(roleName), " ", "-", -1))
}

View File

@ -41,6 +41,12 @@ func AddSeedAssignmentMigrations(mg *migrator.Migrator) {
&migrator.Index{Cols: []string{"builtin_role", "action", "scope"}, Type: migrator.UniqueIndex}))
mg.AddMigration("add primary key to seed_assigment", &seedAssignmentPrimaryKeyMigrator{})
mg.AddMigration("add origin column to seed_assignment",
migrator.NewAddColumnMigration(seedAssignmentTable,
&migrator.Column{Name: "origin", Type: migrator.DB_Varchar, Length: 190, Nullable: true}))
mg.AddMigration("add origin to plugin seed_assignment", &seedAssignmentOnCallMigrator{})
}
type seedAssignmentPrimaryKeyMigrator struct {
@ -119,3 +125,21 @@ func (m *seedAssignmentPrimaryKeyMigrator) Exec(sess *xorm.Session, mig *migrato
return nil
}
type seedAssignmentOnCallMigrator struct {
migrator.MigrationBase
}
func (m *seedAssignmentOnCallMigrator) SQL(dialect migrator.Dialect) string {
return CodeMigrationSQL
}
func (m *seedAssignmentOnCallMigrator) Exec(sess *xorm.Session, mig *migrator.Migrator) error {
_, err := sess.Exec(
`UPDATE seed_assignment SET origin = ? WHERE action LIKE ? OR scope = ?`,
"grafana-oncall-app",
"grafana-oncall-app%",
"plugins:id:grafana-oncall-app",
)
return err
}