Skip to content

Controlar quem pode conectar runners locais (Ollama, LM Studio, llama.cpp) #102

Closed

Description

@patrickbrandao

Contexto

Na revisão do PR #100 (#76), o reviewer observou que, numa instalação multiusuário, qualquer usuário que possa conectar provedores consegue fazer o gateway chamar os runners locais do host (Ollama em :11434, LM Studio em :1234, llama.cpp em :8080) e ler a resposta. Hoje isso é aceitável (um tenant por usuário, instalações pessoais), mas com organizações e papéis o acesso a serviços do host deve ser controlado.

Escopo

  • Definir quem pode conectar provedores locais (por exemplo, só admin da instância ou owner/admin da organização) e se o admin da instância pode desligá-los por completo.
  • Aplicar a regra no serviço compartilhado (dashboard, CLI e MCP).

Fora do escopo

  • Validação de URL de provedores customizados (já coberta pela proteção contra SSRF).

Critérios de aceite

  • Papel sem permissão recebe 403 ao conectar provedor local; testes e2e cobrindo cada papel.

Agente responsável

architect (desenho junto com o modelo de papéis), depois backend-dev.

Dependências

Modelo de organizações e papéis da v0.3.

Activity

  1. added this to the v0.3 milestone on Oct 11, 2026
  2. added
    area:backendBackend: NestJS, TypeORM, proxy, CLI, MCP
    area:providersProvedores: adaptadores, catálogos, preços, assinaturas
    on Oct 11, 2026
  3. patrickbrandao commented on Oct 12, 2026

    @patrickbrandao
    OwnerAuthor

    Achado da revisão do #113 (pré-existente, herdado do upstream): POST /api/v1/routing/ollama/sync chama OllamaSyncService.sync(), que consulta TenantProvider sem filtro de tenant (packages/backend/src/model-discovery/ollama-sync.service.ts:20). Qualquer usuário logado dispara a descoberta de modelos dos provedores Ollama de todos os tenants. Não vaza dados na resposta, mas é uma ação entre tenants. Escopar a sincronização ao tenant de quem chama (e, com papéis, restringir a admin) faz parte desta issue; se precisar antes da v0.3, vira issue própria.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:backendBackend: NestJS, TypeORM, proxy, CLI, MCParea:providersProvedores: adaptadores, catálogos, preços, assinaturas

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions