Regole di sicurezza per le operazioni della pipeline

L'obiettivo principale del supporto delle regole per le query della pipeline è quello di corrispondere alle funzionalità di filtro del motore delle regole esistente. Sebbene le query pipeline offrano un ricco set di funzionalità, il motore di regole è limitato al riconoscimento di filtri semplici per garantire la soddisfacibilità e la sicurezza delle query.

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 delle 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: attivate 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 (come collection()) che può essere verificata dalle regole.