mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
IAM: Protect external service accounts frontend list page (#77834)
* Add `isExternal` property to frontend model * Remove enabled and token buttons for external SA * Replace trash icon for lock icon for external SA * Block the role picker for external SA * Filter SA list using the external filter * Add only external filter at backend --------- Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/services/accesscontrol"
|
||||
"github.com/grafana/grafana/pkg/services/auth/identity"
|
||||
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/services/org"
|
||||
"github.com/grafana/grafana/pkg/services/serviceaccounts"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
@@ -27,6 +28,7 @@ type ServiceAccountsAPI struct {
|
||||
RouterRegister routing.RouteRegister
|
||||
log log.Logger
|
||||
permissionService accesscontrol.ServiceAccountPermissionsService
|
||||
isExternalSAEnabled bool
|
||||
}
|
||||
|
||||
func NewServiceAccountsAPI(
|
||||
@@ -36,6 +38,7 @@ func NewServiceAccountsAPI(
|
||||
accesscontrolService accesscontrol.Service,
|
||||
routerRegister routing.RouteRegister,
|
||||
permissionService accesscontrol.ServiceAccountPermissionsService,
|
||||
features *featuremgmt.FeatureManager,
|
||||
) *ServiceAccountsAPI {
|
||||
return &ServiceAccountsAPI{
|
||||
cfg: cfg,
|
||||
@@ -45,6 +48,7 @@ func NewServiceAccountsAPI(
|
||||
RouterRegister: routerRegister,
|
||||
log: log.New("serviceaccounts.api"),
|
||||
permissionService: permissionService,
|
||||
isExternalSAEnabled: features.IsEnabled(featuremgmt.FlagExternalServiceAccounts) || features.IsEnabled(featuremgmt.FlagExternalServiceAuth),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,10 +269,14 @@ func (api *ServiceAccountsAPI) SearchOrgServiceAccountsWithPaging(c *contextmode
|
||||
// its okay that it fails, it is only filtering that might be weird, but to safe quard against any weird incoming query param
|
||||
onlyWithExpiredTokens := c.QueryBool("expiredTokens")
|
||||
onlyDisabled := c.QueryBool("disabled")
|
||||
onlyExternal := c.QueryBool("external")
|
||||
filter := serviceaccounts.FilterIncludeAll
|
||||
if onlyWithExpiredTokens {
|
||||
filter = serviceaccounts.FilterOnlyExpiredTokens
|
||||
}
|
||||
if api.isExternalSAEnabled && onlyExternal {
|
||||
filter = serviceaccounts.FilterOnlyExternal
|
||||
}
|
||||
if onlyDisabled {
|
||||
filter = serviceaccounts.FilterOnlyDisabled
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user