Regras de segurança para operações de pipeline

Com as regras de operações de pipeline, é possível corresponder aos recursos de filtragem do mecanismo de regras atual. Embora as operações de pipeline ofereçam um conjunto avançado de recursos, o mecanismo de regras é restrito ao reconhecimento de filtros simples para garantir a satisfação e a segurança da consulta.

Requisitos de edição e modo

Este documento se aplica à edição Enterprise do Firestore no modo nativo.

Expressões de filtro compatíveis

Para que uma consulta seja restrita pelas suas regras, ela precisa usar operadores de comparação padrão com constantes. O mecanismo de regras reconhece os seguintes tipos de filtros:

  • Igualdade e desigualdade: eq, neq.
  • Comparações: gt, gte, lt, lte.
  • Assinatura: in, arrayContains.

Veja alguns exemplos:

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

Propriedades da solicitação

Você pode continuar usando o objeto request para validar a autenticação e consultar o contexto, mas algumas propriedades disponíveis em consultas padrão não são compatíveis com pipelines.

Propriedades compatíveis

O novo mecanismo continua oferecendo suporte às seguintes propriedades:

  • request.auth: acesse o UID do usuário e os dados do token.
  • request.method: identifica a operação (por exemplo, get, list).
  • request.path: o caminho do recurso que está sendo acessado.
  • request.time: o carimbo de data/hora do lado do servidor da solicitação.

Propriedades sem suporte

As propriedades request.query, como limit, offset e orderBy, não são compatíveis com as verificações de regras de pipelines devido à complexidade de determinar esses valores em consultas de várias etapas.

Processamento e permissões de estágio do pipeline

Há diferentes estágios de pipeline que são mapeados para operações granulares específicas em regras de segurança:

  • Permissões allow list: acionadas pelas etapas collection(), collectionGroup() e database().
  • Permissões de allow get: acionadas pela etapa documents(), que é tratada de maneira semelhante a uma operação em lote get.
  • Etapas de modificação de campo: as regras só operam em dados armazenados, não em valores derivados. Se um pipeline incluir etapas que modificam campos (por exemplo, AddFields, ReplaceWith, Select), o mecanismo de regras vai parar de aplicar restrições de filtro depois que essa etapa for encontrada.
  • Estágio de literais: o estágio literals() não lê do banco de dados, mas pode gerar custos. Para evitar abusos, ele precisa ser combinado com outra etapa (como collection()) que pode ser verificada por regras.