---
title: "Vendo para SaaS: aislamiento de clientes y aprobaciones"
canonical: https://wavect.io/es/blog/vendo-saas-tenant-isolation/
language: es
description: "Diseña una integración Vendo con dos organizaciones, cambios de rol, aprobaciones y reinicios. Define qué responsabilidades siguen siendo de tu equipo."
image: "https://wavect.io/img/blog/headers/header_vendo-saas-tenant-isolation.png"
---

[**Volver**](/es/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/es/team/kevin-riedl/)

[Kevin Riedl](/es/team/kevin-riedl/) https://linkedin.com/in/wsdt

4 min de lectura · 8 de octubre de 2026 Última revisión 8 de octubre de 2026

[**Siguiente**](/es/blog/enterprise-mcp-authorization-architecture/)

# Vendo para SaaS: aislamiento de clientes y aprobaciones

Resumen

Vendo puede añadir funciones creadas por usuarios a un SaaS, pero la aplicación debe seguir imponiendo identidad, aislamiento y permisos. Empieza con una función de lectura y verifica aprobaciones y reinicios con dos clientes antes de permitir escrituras.

**Base de evidencia:** Documentación revisada el 8 de octubre de 2026. Esta es una guía de implementación investigada. El piloto se propone para tu equipo; no hemos ejecutado estas evaluaciones ni medido el rendimiento de los proveedores.

## ¿Qué sigue siendo responsabilidad del SaaS?

Tu backend decide qué registros puede leer o cambiar cada usuario. Las pantallas generadas, el sandbox y la tarjeta de aprobación no sustituyen autorización en la API. Empieza con un panel cuyos tools ya limiten acceso por cliente. Añade acciones cuando esa frontera supere comprobaciones independientes.

El producto es Vendo en `vendo.run`, la capa de personalización del [repositorio oficial runvendo](https://github.com/runvendo/vendo). Añade funciones y microaplicaciones dirigidas por agentes a un producto existente. Otras empresas llamadas Vendo no forman parte de esta guía.

## ¿Cómo resolver identidad y aislamiento?

La [documentación de autenticación de Vendo](https://docs.vendo.run/howto/auth) usa la identidad existente y recomienda un sujeto inmutable. Su ejemplo sin autenticación asigna el mismo usuario de demostración a todo visitante. No sirve para una integración productiva con varios clientes.

Comparte un resolver de sesión fiable del servidor entre Vendo y tus rutas. Obtén membresías desde el backend y compruébalas en cada herramienta con datos de negocio. Un ID de organización proporcionado por el modelo no prueba acceso. Los usuarios de dos organizaciones también necesitan un contexto activo explícito.

## ¿Qué debe demostrar un piloto con dos clientes?

Crea organizaciones sintéticas A y B, cada una con administrador y miembro de solo lectura. Ambas tienen una factura con igual número local e identificadores internos distintos. Propón una vista de facturas vencidas y una acción de recordatorio. Estos casos son objetivos de aceptación, no resultados observados de Vendo.

| Intento | Resultado requerido | Comprobación independiente |
| --- | --- | --- |
| A solicita la factura de B por ID | Denegación sin revelar campos | Respuesta API y registro de acceso |
| A cambia de organización activa | Solo aparece el contexto autorizado | Volver a consultar y abrir la app guardada |
| Miembro de lectura envía recordatorio | Bloqueado salvo permiso explícito | Registro de envíos sin cambios |
| Administrador pierde rol tras aprobar | Se vuelve a comprobar el permiso | Ningún envío tras revocar |
| Dos workers reanudan la misma acción | Un solo efecto lógico | Clave durable y registro de entregas |
| Reinicio del proceso | Persiste estado autorizado; no reviven permisos caducados | Almacenamiento y repetición de acción |

Prueba acceso directamente en las herramientas y mediante la UI. Ocultar un botón no prueba autorización.

## ¿Vendo pide permiso antes de cada escritura?

No. La [guía de aprobaciones](https://docs.vendo.run/howto/approvals) documenta lectura y escritura automáticas por defecto; operaciones destructivas o sin clasificar piden permiso. Define políticas explícitas para escrituras sensibles, como mensajes o facturación. Una operación crítica puede requerir aprobación aunque no esté clasificada técnicamente como destructiva.

La guía distingue reanudación interna y MCP: tras aprobar, el agente externo debe volver a llamar en la misma sesión MCP. Prueba ambos caminos si los clientes usan ambos. Vincula aprobación a la acción concreta y revisa permisos al ejecutar. Aprobar no permite saltarse autorización.

## ¿Qué debe sobrevivir a un reinicio?

La [documentación de persistencia](https://docs.vendo.run/production/persistence) describe almacenamiento cloud de hilos, apps, grants, aprobaciones, auditoría y ejecuciones. Persistencia no demuestra ejecución única de una escritura del SaaS. Conserva un registro durable con cliente, actor, argumentos aprobados, clave de operación y resultado conciliado.

Si el resultado externo es incierto, inspecciona el destino antes de reintentar. Un recordatorio entregado seguido de un fallo antes de guardar la respuesta puede duplicarse al crear otra operación. Prueba ese punto exacto de interrupción.

## ¿Basta con pasar vendo doctor?

No. La [lista de producción](https://docs.vendo.run/production/deploying) indica que doctor lee código y entorno sin llamar a la app desplegada. Detecta problemas de conexión y después prueba staging para identidad, streaming, webhooks verificados, aprobaciones y reinicios. Cloud cubre parte de la infraestructura; varias fronteras de seguridad siguen siendo tuyas.

## ¿Cuándo encaja Vendo?

Cuando clientes necesitan vistas distintas o flujos acotados sobre una API autorizable. Un copilot propio puede ser más simple para una única tarea sin apps creadas por usuarios. Asigna mantenimiento de esquemas, funciones guardadas y recuperación antes de ampliar. Lleva una función y su matriz de permisos para [definir la integración de agentes en tu SaaS](/es/contact/).

[Descarga el protocolo de piloto propuesto en JSON. Contiene casos de aceptación y campos de resultado vacíos, no resultados medidos.](/downloads/vendo-saas-tenant-isolation-pilot.json)

## Guías de implementación relacionadas

[Arquitectura de autorización MCP para empresas: un diseño de referencia multi-tenant](/es/blog/enterprise-mcp-authorization-architecture/). [AgentMail para SaaS: Aislamiento y recuperación de envíos duplicados](/es/blog/agentmail-saas-duplicate-sends-recovery/).

## Fuentes verificadas

- [runvendo/vendo](https://github.com/runvendo/vendo)
- [Vendo: Auth](https://docs.vendo.run/howto/auth)
- [Vendo: Approvals](https://docs.vendo.run/howto/approvals)
- [Vendo: Persistence](https://docs.vendo.run/production/persistence)
- [Vendo: Deploying](https://docs.vendo.run/production/deploying)

**Independencia y marcas:** Wavect publica esta página y es también un proveedor, así que tenemos un interés comercial en ella. No estamos afiliados a las demás empresas nombradas aquí, no contamos con su respaldo y no somos socios suyos, y todos los nombres de empresa, marcas y marcas registradas de terceros pertenecen a sus respectivos titulares. Las afirmaciones sobre otros proveedores proceden de fuentes públicamente accesibles, sobre todo de sus propias páginas publicadas, en la fecha de revisión indicada en esta página, y pueden haber cambiado desde entonces. Verifícalas directamente antes de decidir. Esta página se ha redactado según nuestro leal saber y entender, con la intención de mantenernos objetivos. Si crees que algo aquí es inexacto o injusto, escríbenos y lo corregimos: [office@wavect.io](mailto:office@wavect.io)

Arquitectura y plataformas

## Continúa por este clúster

Decisiones de frameworks, plataformas y sistemas con impacto a largo plazo.

[Empieza por el artículo fundamental**Arquitectura Smart City: MQTT, LoRaWAN, Kubernetes y Terraform**](/es/blog/smart-city-architecture-best-practices-2026/)

- [GitButler para agentes de IA en paralelo: varias ramas, una compilación](/es/blog/gitbutler-parallel-ai-agents-one-workspace/)
- [AgentMail para SaaS: Aislamiento y recuperación de envíos duplicados](/es/blog/agentmail-saas-duplicate-sends-recovery/)
- [Software con IA: la ventaja competitiva está en operarlo bien](/es/blog/ai-coding-software-moat-operations/)
- [Aprobación de pedidos B2B en Shopify: funciones nativas, apps o portal a medida](/es/blog/shopify-b2b-order-approval-workflow/)
- [Devoluciones y reembolsos Shopify–ERP: cuando el conector estándar no basta](/es/blog/shopify-erp-returns-refunds-integration/)

[**Volver**](/es/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/es/team/kevin-riedl/)

[Kevin Riedl](/es/team/kevin-riedl/) https://linkedin.com/in/wsdt

4 min de lectura · 8 de octubre de 2026 Última revisión 8 de octubre de 2026

[**Siguiente**](/es/blog/enterprise-mcp-authorization-architecture/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/es/blog/vendo-saas-tenant-isolation/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-10-08",
      "inLanguage": "es",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-10-08",
      "url": "https://wavect.io/es/blog/vendo-saas-tenant-isolation/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "Vendo puede añadir funciones creadas por usuarios a un SaaS, pero la aplicación debe seguir imponiendo identidad, aislamiento y permisos. Empieza con una función de lectura y verifica aprobaciones y reinicios con dos clientes antes de permitir escrituras.",
  "articleBody": " Resumen del blog/Entrega y QA/Arquitectura y plataformas Vendo para SaaS: aislamiento de clientes y aprobaciones Resumen Vendo puede añadir funciones creadas por usuarios a un SaaS, pero la aplicación debe seguir imponiendo identidad, aislamiento y permisos. Empieza con una función de lectura y verifica aprobaciones y reinicios con dos clientes antes de permitir escrituras. Base de evidencia: Documentación revisada el 8 de octubre de 2026. Esta es una guía de implementación investigada. El piloto se propone para tu equipo; no hemos ejecutado estas evaluaciones ni medido el rendimiento de los proveedores. ¿Qué sigue siendo responsabilidad del SaaS? Tu backend decide qué registros puede leer o cambiar cada usuario. Las pantallas generadas, el sandbox y la tarjeta de aprobación no sustituyen autorización en la API. Empieza con un panel cuyos tools ya limiten acceso por cliente. Añade acciones cuando esa frontera supere comprobaciones independientes. El producto es Vendo en vendo.run, la capa de personalización del repositorio oficial runvendo. Añade funciones y microaplicaciones dirigidas por agentes a un producto existente. Otras empresas llamadas Vendo no forman parte de esta guía. ¿Cómo resolver identidad y aislamiento? La documentación de autenticación de Vendo usa la identidad existente y recomienda un sujeto inmutable. Su ejemplo sin autenticación asigna el mismo usuario de demostración a todo visitante. No sirve para una integración productiva con varios clientes. Comparte un resolver de sesión fiable del servidor entre Vendo y tus rutas. Obtén membresías desde el backend y compruébalas en cada herramienta con datos de negocio. Un ID de organización proporcionado por el modelo no prueba acceso. Los usuarios de dos organizaciones también necesitan un contexto activo explícito. ¿Qué debe demostrar un piloto con dos clientes? Crea organizaciones sintéticas A y B, cada una con administrador y miembro de solo lectura. Ambas tienen una factura con igual número local e identificadores internos distintos. Propón una vista de facturas vencidas y una acción de recordatorio. Estos casos son objetivos de aceptación, no resultados observados de Vendo. IntentoResultado requeridoComprobación independiente A solicita la factura de B por IDDenegación sin revelar camposRespuesta API y registro de accesoA cambia de organización activaSolo aparece el contexto autorizadoVolver a consultar y abrir la app guardadaMiembro de lectura envía recordatorioBloqueado salvo permiso explícitoRegistro de envíos sin cambiosAdministrador pierde rol tras aprobarSe vuelve a comprobar el permisoNingún envío tras revocarDos workers reanudan la misma acciónUn solo efecto lógicoClave durable y registro de entregasReinicio del procesoPersiste estado autorizado; no reviven permisos caducadosAlmacenamiento y repetición de acción Prueba acceso directamente en las herramientas y mediante la UI. Ocultar un botón no prueba autorización. ¿Vendo pide permiso antes de cada escritura? No. La guía de aprobaciones documenta lectura y escritura automáticas por defecto; operaciones destructivas o sin clasificar piden permiso. Define políticas explícitas para escrituras sensibles, como mensajes o facturación. Una operación crítica puede requerir aprobación aunque no esté clasificada técnicamente como destructiva. La guía distingue reanudación interna y MCP: tras aprobar, el agente externo debe volver a llamar en la misma sesión MCP. Prueba ambos caminos si los clientes usan ambos. Vincula aprobación a la acción concreta y revisa permisos al ejecutar. Aprobar no permite saltarse autorización. ¿Qué debe sobrevivir a un reinicio? La documentación de persistencia describe almacenamiento cloud de hilos, apps, grants, aprobaciones, auditoría y ejecuciones. Persistencia no demuestra ejecución única de una escritura del SaaS. Conserva un registro durable con cliente, actor, argumentos aprobados, clave de operación y resultado conciliado. Si el resultado externo es incierto, inspecciona el destino antes de reintentar. Un recordatorio entregado seguido de un fallo antes de guardar la respuesta puede duplicarse al crear otra operación. Prueba ese punto exacto de interrupción. ¿Basta con pasar vendo doctor? No. La lista de producción indica que doctor lee código y entorno sin llamar a la app desplegada. Detecta problemas de conexión y después prueba staging para identidad, streaming, webhooks verificados, aprobaciones y reinicios. Cloud cubre parte de la infraestructura; varias fronteras de seguridad siguen siendo tuyas. ¿Cuándo encaja Vendo? Cuando clientes necesitan vistas distintas o flujos acotados sobre una API autorizable. Un copilot propio puede ser más simple para una única tarea sin apps creadas por usuarios. Asigna mantenimiento de esquemas, funciones guardadas y recuperación antes de ampliar. Lleva una función y su matriz de permisos para definir la integración de agentes en tu SaaS. Descarga el protocolo de piloto propuesto en JSON. Contiene casos de",
  "articleSection": "Ingeniería",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "repositorio oficial runvendo",
      "url": "https://github.com/runvendo/vendo"
    },
    {
      "@type": "WebPage",
      "name": "documentación de autenticación de Vendo",
      "url": "https://docs.vendo.run/howto/auth"
    },
    {
      "@type": "WebPage",
      "name": "guía de aprobaciones",
      "url": "https://docs.vendo.run/howto/approvals"
    },
    {
      "@type": "WebPage",
      "name": "documentación de persistencia",
      "url": "https://docs.vendo.run/production/persistence"
    },
    {
      "@type": "WebPage",
      "name": "lista de producción",
      "url": "https://docs.vendo.run/production/deploying"
    }
  ],
  "dateModified": "2026-10-08",
  "datePublished": "2026-10-08",
  "description": "Vendo puede añadir funciones creadas por usuarios a un SaaS, pero la aplicación debe seguir imponiendo identidad, aislamiento y permisos. Empieza con una función de lectura y verifica aprobaciones y reinicios con dos clientes antes de permitir escrituras.",
  "headline": "Vendo para SaaS: aislamiento de clientes y aprobaciones",
  "image": "https://wavect.io/img/blog/headers/header_vendo-saas-tenant-isolation.svg",
  "inLanguage": "es",
  "keywords": "Ingeniería, Agentes de IA",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/es/blog/vendo-saas-tenant-isolation/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/es/blog/vendo-saas-tenant-isolation/",
  "wordCount": 1128
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/",
      "name": "Inicio",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/overview/",
      "name": "Resumen del blog",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/topics/delivery-qa/",
      "name": "Entrega y QA",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/clusters/architecture-platforms/",
      "name": "Arquitectura y plataformas",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/vendo-saas-tenant-isolation/",
      "name": "Vendo para SaaS: aislamiento de clientes y aprobaciones",
      "position": 5
    }
  ]
}
```
