/
githubmirror
/
grafana
Обзор
Документация
Войти
/
githubmirror
/
grafana
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
apps/example/pkg/app/authorizer.go
55 строк
2 KB
Austin Pond
Apps: Add Example App to `./apps` (#112069)
27 окт 2025, 19:01
Не верифицирован
27 окт 2025, 19:01
bf65c43
Код
Авторство
О чём код?
package app import ( "context" "fmt" "regexp" "k8s.io/apiserver/pkg/authorization/authorizer" "github.com/grafana/grafana/apps/example/pkg/apis/example/v1alpha1" "github.com/grafana/grafana/pkg/apimachinery/identity" ) var namespacedSomethingRouteMatcher = regexp.MustCompile(fmt.Sprintf(`^/apis/%s/%s/namespaces/([^\/]+)/something$`, v1alpha1.APIGroup, v1alpha1.APIVersion)) // GetAuthorizer returns an authorizer for all kinds managed by the example app. // It must be added to the installer in pkg/registry/apps/example/register.go to be used func GetAuthorizer() authorizer.Authorizer { return authorizer.AuthorizerFunc( func(ctx context.Context, attr authorizer.Attributes) (authorizer.Decision, string, error) { if !attr.IsResourceRequest() { return authorizer.DecisionNoOpinion, "", nil } // require a user u, err := identity.GetRequester(ctx) if err != nil { return authorizer.DecisionDeny, "valid user is required", err } // check if is admin if u.GetIsGrafanaAdmin() { return authorizer.DecisionAllow, "", nil } // Only allow admins to call the custom subresource if attr.GetSubresource() == "custom" { return authorizer.DecisionDeny, "forbidden", nil } // Only allow admins to call the namespaced and cluster routes // There's no easy way to check that from attrs like with GetSubresource(), // so we look at the full path and check if namespacedSomethingRouteMatcher.MatchString(attr.GetPath()) { return authorizer.DecisionDeny, "forbidden", nil } if attr.GetPath() == fmt.Sprintf("/apis/%s/%s/other", v1alpha1.APIGroup, v1alpha1.APIVersion) { return authorizer.DecisionDeny, "forbidden", nil } // Otherwise, allow return authorizer.DecisionAllow, "", nil }, ) }