Quiero la capacidad de un usuario para leer y eliminar registros en Firebase creados por alguien a quien invitaron a crear registros.

Los registros creados tienen un campo 'resource.data.ownerUid', donde ownerId es el uid del usuario que invitó a otros a crear registros.

Si intento algo como:

allow read, delete: if request.auth.uid == resource.data.ownerUid;

Pero obtengo el permiso denegado en el paso 'obtener' de:

firestore.collection('screeningResponses')
  .where('screeningId', '==', screeningId)
  .get()

Resultados en

FirebaseError: Missing or insufficient permissions.

En ese momento, estaba planeando iterar a través de QuerySnapshot y eliminar los registros, pero no puedo llegar tan lejos. ¿Alguna sugerencia?

0
Adrian 20 ene. 2021 a las 12:09

1 respuesta

La mejor respuesta

Las reglas de seguridad de Firebase no filtran los datos por sí solas. En su lugar, simplemente verifican si la operación de lectura está permitida de acuerdo con las reglas.

Por esta razón, su consulta deberá replicar lo que requieren las reglas. Dado que sus reglas requieren que el usuario sea el propietario de los datos que leen, la consulta debe hacer lo mismo:

firestore.collection('screeningResponses')
  .where('ownerUid', '==', firebase.auth().currentUser.uid) // 👈 this is new
  .where('screeningId', '==', screeningId)
  .get()
1
Frank van Puffelen 20 ene. 2021 a las 15:00