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 etapascollection(),collectionGroup()edatabase(). - Permissões de
allow get: acionadas pela etapadocuments(), que é tratada de maneira semelhante a uma operação em loteget. - 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 (comocollection()) que pode ser verificada por regras.