RBAC: Refactor RBAC plugin interface code (#90679)
move plugin RBAC registration ifaces to pluginsintegrations
This commit is contained in:
@@ -19,6 +19,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/process"
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/registry"
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/signature"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol"
|
||||
)
|
||||
|
||||
func ProvideDiscoveryStage(cfg *config.PluginManagementCfg, pf finder.Finder, pr registry.Service) *discovery.Discovery {
|
||||
@@ -60,8 +61,8 @@ func ProvideValidationStage(cfg *config.PluginManagementCfg, sv signature.Valida
|
||||
|
||||
func ProvideInitializationStage(cfg *config.PluginManagementCfg, pr registry.Service, bp plugins.BackendFactoryProvider,
|
||||
pm process.Manager, externalServiceRegistry auth.ExternalServiceRegistry,
|
||||
roleRegistry plugins.RoleRegistry,
|
||||
actionSetRegistry plugins.ActionSetRegistry,
|
||||
roleRegistry pluginaccesscontrol.RoleRegistry,
|
||||
actionSetRegistry pluginaccesscontrol.ActionSetRegistry,
|
||||
pluginEnvProvider envvars.Provider,
|
||||
tracer tracing.Tracer) *initialization.Initialize {
|
||||
return initialization.New(cfg, initialization.Opts{
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/registry"
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/signature"
|
||||
"github.com/grafana/grafana/pkg/plugins/pfs"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol"
|
||||
)
|
||||
|
||||
// ExternalServiceRegistration implements an InitializeFunc for registering external services.
|
||||
@@ -70,15 +71,15 @@ func (r *ExternalServiceRegistration) Register(ctx context.Context, p *plugins.P
|
||||
// RegisterPluginRoles implements an InitializeFunc for registering plugin roles.
|
||||
type RegisterPluginRoles struct {
|
||||
log log.Logger
|
||||
roleRegistry plugins.RoleRegistry
|
||||
roleRegistry pluginaccesscontrol.RoleRegistry
|
||||
}
|
||||
|
||||
// RegisterPluginRolesStep returns a new InitializeFunc for registering plugin roles.
|
||||
func RegisterPluginRolesStep(roleRegistry plugins.RoleRegistry) initialization.InitializeFunc {
|
||||
func RegisterPluginRolesStep(roleRegistry pluginaccesscontrol.RoleRegistry) initialization.InitializeFunc {
|
||||
return newRegisterPluginRoles(roleRegistry).Register
|
||||
}
|
||||
|
||||
func newRegisterPluginRoles(registry plugins.RoleRegistry) *RegisterPluginRoles {
|
||||
func newRegisterPluginRoles(registry pluginaccesscontrol.RoleRegistry) *RegisterPluginRoles {
|
||||
return &RegisterPluginRoles{
|
||||
log: log.New("plugins.roles.registration"),
|
||||
roleRegistry: registry,
|
||||
@@ -97,15 +98,15 @@ func (r *RegisterPluginRoles) Register(ctx context.Context, p *plugins.Plugin) (
|
||||
// RegisterActionSets implements an InitializeFunc for registering plugin action sets.
|
||||
type RegisterActionSets struct {
|
||||
log log.Logger
|
||||
actionSetRegistry plugins.ActionSetRegistry
|
||||
actionSetRegistry pluginaccesscontrol.ActionSetRegistry
|
||||
}
|
||||
|
||||
// RegisterActionSetsStep returns a new InitializeFunc for registering plugin action sets.
|
||||
func RegisterActionSetsStep(actionRegistry plugins.ActionSetRegistry) initialization.InitializeFunc {
|
||||
func RegisterActionSetsStep(actionRegistry pluginaccesscontrol.ActionSetRegistry) initialization.InitializeFunc {
|
||||
return newRegisterActionSets(actionRegistry).Register
|
||||
}
|
||||
|
||||
func newRegisterActionSets(registry plugins.ActionSetRegistry) *RegisterActionSets {
|
||||
func newRegisterActionSets(registry pluginaccesscontrol.ActionSetRegistry) *RegisterActionSets {
|
||||
return &RegisterActionSets{
|
||||
log: log.New("plugins.actionsets.registration"),
|
||||
actionSetRegistry: registry,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package pluginaccesscontrol
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
ac "github.com/grafana/grafana/pkg/services/accesscontrol"
|
||||
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
@@ -23,6 +26,16 @@ var (
|
||||
AdminAccessEvaluator = ac.EvalAny(ac.EvalPermission(ActionWrite), ac.EvalPermission(ActionInstall))
|
||||
)
|
||||
|
||||
// RoleRegistry handles the plugin RBAC roles and their assignments
|
||||
type RoleRegistry interface {
|
||||
DeclarePluginRoles(ctx context.Context, ID, name string, registrations []plugins.RoleRegistration) error
|
||||
}
|
||||
|
||||
// ActionSetRegistry handles the plugin RBAC actionsets
|
||||
type ActionSetRegistry interface {
|
||||
RegisterActionSets(ctx context.Context, ID string, registrations []plugins.ActionSet) error
|
||||
}
|
||||
|
||||
func ReqCanAdminPlugins(cfg *setting.Cfg) func(rc *contextmodel.ReqContext) bool {
|
||||
// Legacy handler that protects access to the Configuration > Plugins page
|
||||
return func(rc *contextmodel.ReqContext) bool {
|
||||
|
||||
Reference in New Issue
Block a user