authz

package
v2.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 2, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package authz provides role-based authorization middleware.

NewRequireRoleMiddleware keeps the v2-compatible single-return constructor shape. Invalid configuration fails closed at request time. Use NewRequireRoleMiddlewareChecked when application startup should fail fast on an empty required role or nil RolesFromContext resolver.

During route wiring, use ValidateRequireRoleMiddleware(method, route, middleware) or ValidateRequireRoleMiddlewareRoutes for startup checks over route registries.

Route registry recommendation:

checks := []authz.RequireRoleRouteSpec{
    {Method: http.MethodGet, Route: "/admin", Middleware: adminMw},
    {Method: http.MethodPost, Route: "/billing", Middleware: billingMw},
}
if err := authz.ValidateRequireRoleMiddlewareRoutes(checks); err != nil {
    return fmt.Errorf("route contract scan failed: %w", err)
}

chi route bootstrap helper:

if err := chiAdapter.ValidateRequireRoleMiddlewareRoutes(router.Mux, func(method, route string, _ http.Handler) *authz.RequireRoleMiddleware {
    switch route {
    case "/admin":
        return adminMw
    }
    return nil
}); err != nil {
    return fmt.Errorf("route contract scan failed: %w", err)
}

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrRequireRoleMissingResolver = errors.New("rolesFromContext resolver is missing")

ErrRequireRoleMissingResolver indicates RolesFromContext was not configured.

View Source
var ErrRequireRoleMissingRole = errors.New("required role is missing")

ErrRequireRoleMissingRole indicates required role was not provided.

Functions

func ValidateRequireRoleMiddleware added in v2.1.0

func ValidateRequireRoleMiddleware(method, route string, middleware *RequireRoleMiddleware) error

ValidateRequireRoleMiddleware validates a configured role middleware against route and method context. Use this during bootstrap to fail fast on missing role wiring before serving traffic.

func ValidateRequireRoleMiddlewareRoutes added in v2.1.0

func ValidateRequireRoleMiddlewareRoutes(routes []RequireRoleRouteSpec) error

ValidateRequireRoleMiddlewareRoutes validates a route registry in one pass.

Useful at startup for CI and server bootstrap to fail fast when a route middleware is missing required role wiring.

Types

type RequireRoleMiddleware

type RequireRoleMiddleware struct {
	// contains filtered or unexported fields
}

RequireRoleMiddleware enforces a required role for a request.

func NewRequireRoleMiddleware

func NewRequireRoleMiddleware(role string, rolesFromCtx RolesFromContext) *RequireRoleMiddleware

NewRequireRoleMiddleware constructs a role enforcement middleware.

This constructor keeps the v2-compatible single-return shape. Invalid configuration is retained on the middleware and fails closed at request time; callers that want startup validation should use NewRequireRoleMiddlewareChecked or ValidateRequireRoleMiddleware.

func NewRequireRoleMiddlewareChecked added in v2.1.0

func NewRequireRoleMiddlewareChecked(role string, rolesFromCtx RolesFromContext) (*RequireRoleMiddleware, error)

NewRequireRoleMiddlewareChecked constructs a role enforcement middleware and returns configuration errors for startup validation.

Example
package main

import (
	"context"
	"fmt"
	"net/http"

	"github.com/aatuh/api-toolkit/v2/middleware/auth/authz"
)

func main() {
	rolesFromContext := func(context.Context) []string {
		return []string{"admin"}
	}

	admin, err := authz.NewRequireRoleMiddlewareChecked("admin", rolesFromContext)
	if err != nil {
		panic(err)
	}
	if err := authz.ValidateRequireRoleMiddlewareRoutes([]authz.RequireRoleRouteSpec{
		{Method: http.MethodGet, Route: "/admin", Middleware: admin},
	}); err != nil {
		panic(err)
	}

	fmt.Println("authz startup checks passed")
}
Output:
authz startup checks passed

func (*RequireRoleMiddleware) Handler

func (m *RequireRoleMiddleware) Handler(next http.Handler) http.Handler

Handler wraps the next handler with role checks.

type RequireRoleRouteSpec added in v2.1.0

type RequireRoleRouteSpec struct {
	Method     string
	Route      string
	Middleware *RequireRoleMiddleware
}

RequireRoleRouteSpec provides route-level metadata for bootstrap validation.

type RolesFromContext

type RolesFromContext func(ctx context.Context) []string

RolesFromContext returns the roles associated with the current request context. Callers should return a stable slice (copy if needed) if the backing store is mutable.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL