Introduzione alle regole di sicurezza

Con le regole di sicurezza di Firestore, puoi concentrarti sulla creazione di una fantastica esperienza utente senza dover gestire l'infrastruttura o scrivere codice di autorizzazione e autenticazione lato server.

Le regole di sicurezza offrono controllo dell'accesso e la convalida dei dati in un formato semplice ma espressivo. Per creare sistemi di accesso basati sugli utenti e sui ruoli che mantengono al sicuro i dati degli utenti, devi utilizzare Firebase Authentication con le regole di sicurezza di Firestore.

Regole di sicurezza versione 2

A partire da maggio 2019, è disponibile la versione 2 delle regole di sicurezza di Firestore. La versione 2 delle regole modifica il comportamento dei caratteri jolly ricorrenti {name=**}. Devi utilizzare la versione 2 se prevedi di utilizzare query sul gruppo di raccolta. Devi attivare la versione 2 impostando rules_version = '2'; come prima riga nelle regole di sicurezza:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

Scrittura delle regole

Scriverai e gestirai le regole di sicurezza di Firestore su misura per il modello dei dati che crei per il database predefinito e per ogni database aggiuntivo nel tuo progetto.

Tutte le regole di sicurezza di Firestore sono composte da istruzioni match, che identificano i documenti nel database, ed espressioni allow, che controllano l'accesso a questi documenti:

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

Ogni richiesta di database da una libreria client web/mobile di Firestore viene valutata in base alle tue regole di sicurezza prima di leggere o scrivere dati. Se le regole negano l'accesso a uno dei percorsi dei documenti specificati, l'intera richiesta non va a buon fine.

Di seguito sono riportati alcuni esempi di serie di regole di base. Sebbene queste regole siano valide, non sono consigliate per le applicazioni di produzione:

Autorizzazione obbligatoria

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Nega tutto

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Consenti tutto

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Il percorso {document=**} utilizzato negli esempi sopra corrisponde a qualsiasi documento nell'intero database. Passa alla guida alla strutturazione delle regole di sicurezza per scoprire come creare corrispondenze con percorsi di dati specifici e utilizzare i dati gerarchici.

Test delle regole

Firestore fornisce un simulatore di regole che puoi utilizzare per testare il tuo set di regole. Puoi accedere al simulatore dalla scheda Regole nella sezione Firestore della console Firebase.

Il simulatore di regole consente di simulare letture, scritture ed eliminazioni autenticate e non autenticate. Quando simuli una richiesta autenticata, puoi creare e visualizzare l'anteprima dei token di autenticazione di vari provider. Le richieste simulate vengono eseguite in base al set di regole nell'editor, non in base al set di regole di cui è stato eseguito il deployment.

Deployment delle regole

Prima di poter iniziare a utilizzare Firestore dalla tua app mobile, devi eseguire il deployment delle regole di sicurezza. Puoi eseguire il deployment delle regole nella console Firebase, utilizzando l'interfaccia a riga di comando di Firebase o con l'API REST di gestione di Firestore.

Gli aggiornamenti delle regole di sicurezza Firestore possono richiedere fino a un minuto per influire sulle nuove query e sugli ascoltatori. Tuttavia, la propagazione completa delle modifiche e l'impatto su tutti i listener attivi possono richiedere fino a 10 minuti.

Utilizzare la Console Firebase

Per configurare ed eseguire il deployment del tuo primo insieme di regole, per il database predefinito nel tuo progetto apri la scheda Regole nella sezione Firestore della console Firebase.

Scrivi le regole nell'editor online, poi fai clic su Pubblica.

Utilizzare l'interfaccia a riga di comando di Firebase

Puoi anche eseguire il deployment delle regole utilizzando l'interfaccia a riga di comando di Firebase. L'utilizzo dell'interfaccia a riga di comando consente di mantenere le regole sotto il controllo della versione con il codice dell'applicazione e di eseguire il deployment delle regole nell'ambito del processo di deployment esistente.

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

// Edit the generated .rules file to your desired security rules
// ...

// Deploy rules for all configured databases
firebase deploy --only firestore

Passaggi successivi