O principal objetivo do suporte a regras de consultas de pipeline é corresponder aos recursos de filtragem do mecanismo de regras atual. Embora as consultas 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.
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 o contexto da consulta, embora algumas propriedades disponíveis em consultas padrão não sejam 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 não compatíveis
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 estágios que modificam campos (por exemplo,
AddFields,ReplaceWith,Select), o mecanismo de regras vai parar de aplicar restrições de filtro depois que esse estágio for encontrado. - Etapa de literais: a etapa
literals()não lê do banco de dados, mas pode gerar custos. Para evitar abusos, ele precisa ser combinado com outro estágio (comocollection()) que pode ser verificado por regras.