Mis reglas de seguridad son súper simples. Tengo dos colecciones: riders y races :
riders : solo se puede leer o escribir cuando el usuario ha iniciado sesiónraces : puede ser leído por un usuario no autenticado; escrito cuando el usuario inicia sesión. service cloud.firestore { match /databases/{database}/documents { // restrict read/write on all to authenticated match /{document=**} { allow read, write: if request.auth != null; // then allow collection read if match match /races/{id} { allow read, list: if true; } } } } Estas reglas permiten lo que parece ser la configuración correcta usando el Rules Playground de las consolas de Firebase, pero en los usuarios de autenticación del navegador se comportan como se esperaba, pero a los usuarios no autenticados se les devuelve un error cuando llaman a una carrera:
core.js:6456 ERROR FirebaseError: Missing or insufficient permissions. at new e (prebuilt-47338342-439a2133.js:188) at prebuilt-47338342-439a2133.js:10415 at prebuilt-47338342-439a2133.js:10416 at e.onMessage (prebuilt-47338342-439a2133.js:10438) at prebuilt-47338342-439a2133.js:10355 at prebuilt-47338342-439a2133.js:10386 at prebuilt-47338342-439a2133.js:15146 at ZoneDelegate.invoke (zone.js:372) at Zone.run (zone.js:134) at zone.js:1276 // service call this.racesCollection = this.firestore.collection<Race>('races'); this.racesCollection .doc(id) .valueChanges() .pipe(takeUntil(this.destroy$)) .subscribe((response: any) => { console.log('=== APP SERVICE emits race ===', response); this.race.next(response); });He intentado reescribir las reglas, pero parece que no puedo encontrar mi camino alrededor de esta. ¡Cualquier ayuda o idea apreciada! Gracias.
Debe escribir sus reglas de seguridad de tal manera que se superpongan :
service cloud.firestore { match /databases/{database}/documents { // restrict read/write on all to authenticated match /{document=**} { allow read, write: if request.auth != null; } // then allow read for the races collection for all users match /races/{id} { allow read, list: if true; } } } Además, tenga en cuenta que list es un "subcaso" de read , por lo que puede eliminar la regla de list , es decir, simplemente allow read: if true; .
Por cierto, el simulador muestra correctamente que sus reglas no permiten leer un documento en la colección de races si no está autenticado.