Regole di sicurezza per le operazioni della pipeline

Le regole Operazioni pipeline ti consentono di abbinare le funzionalità di filtro del motore delle regole esistente. Sebbene le operazioni della pipeline offrano un ricco insieme di funzionalità, il motore delle regole è limitato al riconoscimento di filtri semplici per garantire la soddisfacibilità e la sicurezza delle query.

Requisiti relativi alla modalità e alla versione

Questo documento si applica alla versione Enterprise di Firestore in modalità Native.

Espressioni di filtro supportate

Affinché una query sia vincolata dalle tue regole, deve utilizzare operatori di confronto standard rispetto a costanti. Il motore delle regole riconosce i seguenti tipi di filtri:

  • Uguaglianza e disuguaglianza: eq, neq.
  • Confronti: gt, gte, lt, lte.
  • Abbonamento: in, arrayContains.

Ecco alcuni esempi:

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

Proprietà della richiesta

Puoi continuare a utilizzare l'oggetto request per convalidare l'autenticazione e il contesto della query, anche se alcune proprietà disponibili nelle query standard non sono supportate nelle pipeline.

Proprietà supportate

Il nuovo motore continua a supportare le seguenti proprietà:

  • request.auth: Accedi ai dati del token e dell'UID utente.
  • request.method: identifica l'operazione (ad esempio, get, list).
  • request.path: il percorso della risorsa a cui viene eseguito l'accesso.
  • request.time: il timestamp lato server della richiesta.

Proprietà non supportate

Le proprietà request.query come limit, offset e orderBy non sono supportate per i controlli delle regole di Pipelines a causa della complessità della determinazione di questi valori nelle query in più fasi.

Gestione e autorizzazioni delle fasi della pipeline

Esistono diverse fasi della pipeline che corrispondono a operazioni granulari specifiche nelle regole di sicurezza:

  • Autorizzazioni allow list: attivate dalle fasi collection(), collectionGroup() e database().
  • allow get: attivato dalla fase documents(), che viene trattata in modo simile a un'operazione batch get.
  • Fasi di modifica dei campi: le regole operano solo sui dati archiviati e non sui valori derivati. Se una pipeline include fasi che modificano i campi (ad esempio, AddFields, ReplaceWith, Select), il motore delle regole smette di applicare i vincoli di filtro dopo che viene rilevata la fase.
  • Fase dei valori letterali: la fase literals() non legge dal database, ma può comportare costi. Per evitare abusi, deve essere abbinato a un'altra fase (ad esempio collection()) che può essere verificata dalle regole.