From 7ae0ff13093a2dd402588136a8618411eb5c9f8e Mon Sep 17 00:00:00 2001 From: Misi Date: Thu, 16 Nov 2023 09:15:51 +0100 Subject: [PATCH] RBAC: Add OAuth provider scopes separately to fixed:authentication.config:writer (#78202) Add OAuth provider setting scopes to fixed:authentication writer * Change SSO Settings api scopes * Remove unused RBAC Action --- pkg/services/accesscontrol/models.go | 5 ++- pkg/services/accesscontrol/roles.go | 48 +++++++++++++++++++++++++--- pkg/services/ssosettings/api/api.go | 8 ++--- 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/pkg/services/accesscontrol/models.go b/pkg/services/accesscontrol/models.go index 6dc73b60158..81b7ec3be61 100644 --- a/pkg/services/accesscontrol/models.go +++ b/pkg/services/accesscontrol/models.go @@ -396,7 +396,6 @@ const ( // Settings scope ScopeSettingsAll = "settings:*" - ScopeSettingsAuth = "settings:auth:*" ScopeSettingsSAML = "settings:auth.saml:*" // Team related actions @@ -467,6 +466,10 @@ var ( // Team scope ScopeTeamsID = Scope("teams", "id", Parameter(":teamId")) + ScopeSettingsOAuth = func(provider string) string { + return Scope("settings", "auth."+provider, "*") + } + // Annotation scopes ScopeAnnotationsRoot = "annotations" ScopeAnnotationsProvider = NewScopeProvider(ScopeAnnotationsRoot) diff --git a/pkg/services/accesscontrol/roles.go b/pkg/services/accesscontrol/roles.go index 16656ddb214..8aaeec91e46 100644 --- a/pkg/services/accesscontrol/roles.go +++ b/pkg/services/accesscontrol/roles.go @@ -202,19 +202,59 @@ var ( Permissions: []Permission{ { Action: ActionSettingsRead, - Scope: ScopeSettingsAuth, + Scope: ScopeSettingsSAML, }, { Action: ActionSettingsWrite, - Scope: ScopeSettingsAuth, + Scope: ScopeSettingsSAML, }, { Action: ActionSettingsRead, - Scope: ScopeSettingsSAML, + Scope: ScopeSettingsOAuth("azuread"), }, { Action: ActionSettingsWrite, - Scope: ScopeSettingsSAML, + Scope: ScopeSettingsOAuth("azuread"), + }, + { + Action: ActionSettingsRead, + Scope: ScopeSettingsOAuth("okta"), + }, + { + Action: ActionSettingsWrite, + Scope: ScopeSettingsOAuth("okta"), + }, + { + Action: ActionSettingsRead, + Scope: ScopeSettingsOAuth("github"), + }, + { + Action: ActionSettingsWrite, + Scope: ScopeSettingsOAuth("github"), + }, + { + Action: ActionSettingsRead, + Scope: ScopeSettingsOAuth("gitlab"), + }, + { + Action: ActionSettingsWrite, + Scope: ScopeSettingsOAuth("gitlab"), + }, + { + Action: ActionSettingsRead, + Scope: ScopeSettingsOAuth("google"), + }, + { + Action: ActionSettingsWrite, + Scope: ScopeSettingsOAuth("google"), + }, + { + Action: ActionSettingsRead, + Scope: ScopeSettingsOAuth("generic_oauth"), + }, + { + Action: ActionSettingsWrite, + Scope: ScopeSettingsOAuth("generic_oauth"), }, }, } diff --git a/pkg/services/ssosettings/api/api.go b/pkg/services/ssosettings/api/api.go index bac09c5a1ab..7d4dc388e7f 100644 --- a/pkg/services/ssosettings/api/api.go +++ b/pkg/services/ssosettings/api/api.go @@ -43,13 +43,11 @@ func (api *Api) RegisterAPIEndpoints() { auth := ac.Middleware(api.AccessControl) scopeKey := ac.Parameter(":key") - settingsScope := ac.Scope("settings", "auth."+scopeKey, "*") + settingsScope := ac.ScopeSettingsOAuth(scopeKey) - reqWriteAccess := auth(ac.EvalAny( - ac.EvalPermission(ac.ActionSettingsWrite, ac.ScopeSettingsAuth), - ac.EvalPermission(ac.ActionSettingsWrite, settingsScope))) + reqWriteAccess := auth(ac.EvalPermission(ac.ActionSettingsWrite, settingsScope)) - router.Get("/", auth(ac.EvalPermission(ac.ActionSettingsRead, ac.ScopeSettingsAuth)), routing.Wrap(api.listAllProvidersSettings)) + router.Get("/", auth(ac.EvalPermission(ac.ActionSettingsRead)), routing.Wrap(api.listAllProvidersSettings)) router.Get("/:key", auth(ac.EvalPermission(ac.ActionSettingsRead, settingsScope)), routing.Wrap(api.getProviderSettings)) router.Put("/:key", reqWriteAccess, routing.Wrap(api.updateProviderSettings)) router.Delete("/:key", reqWriteAccess, routing.Wrap(api.removeProviderSettings))