diff --git a/pkg/apimachinery/identity/context.go b/pkg/apimachinery/identity/context.go index 1ce76389f59..00488ed9d85 100644 --- a/pkg/apimachinery/identity/context.go +++ b/pkg/apimachinery/identity/context.go @@ -74,6 +74,21 @@ func newInternalIdentity(name string, namespace string, orgID int64, opts ...Ide return staticRequester } +// WithServiceIdentityForSingleNamespace sets an identity representing the service itself in provided namespace and store it in context. +// This is useful for background tasks that has to communicate with other services in the same namespace. It also returns a Requester with +// static permissions so it can be used in legacy code paths. +func WithServiceIdentityForSingleNamespace(ctx context.Context, namespace string, opts ...IdentityOpts) (context.Context, Requester) { + r := newInternalIdentity(serviceName, namespace, 1, opts...) + return WithRequester(ctx, r), r +} + +// WithServiceIdentityForSingleNamespaceContext sets an identity representing the service itself in context, restricted to a namespace. +// Use when using a middleware that signs tokens with the same restriction. +func WithServiceIdentityForSingleNamespaceContext(ctx context.Context, namespace string, opts ...IdentityOpts) context.Context { + ctx, _ = WithServiceIdentityForSingleNamespace(ctx, namespace, opts...) + return ctx +} + // WithServiceIdentity sets an identity representing the service itself in provided org and store it in context. // This is useful for background tasks that has to communicate with unfied storage. It also returns a Requester with // static permissions so it can be used in legacy code paths.