package middleware import "net/http" // RequireRole returns middleware that allows only requests whose authenticated user // holds one of the permitted roles. Must be chained after Auth middleware. func RequireRole(allowed ...string) func(http.Handler) http.Handler { set := make(map[string]struct{}, len(allowed)) for _, r := range allowed { set[r] = struct{}{} } return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if _, ok := set[UserRoleFromContext(r.Context())]; !ok { http.Error(w, `{"error":"forbidden"}`, http.StatusForbidden) return } next.ServeHTTP(w, r) }) } }