Tengo una colección en mi firestore llamada "informes"
uno de los campos en el mapa de informes es una matriz de objetos. Estos objetos hacen referencia a una foto en el almacenamiento en la nube. Se ven así (la URL apunta al almacenamiento en la nube):
{ id: uid value url: some-url }
Mis reglas de Firebase están configuradas así para el documento de informes:
match /databases/{database}/documents { match /reports/{report} { allow read: if request.auth != null && request.auth.uid == resource.data.userID; allow create: if request.auth != null && request.resource.data.userID == request.auth.uid; allow delete, update: if request.auth != null && request.auth.uid == resource.data.userID; } }
por alguna razón, puedo eliminar todo el documento si quiero probar que tengo permiso de eliminación... pero cuando intento eliminar un elemento de la matriz de fotos de esta manera:
const reportRef = db.collection('reports') reportRef.doc(activeReport.id).update({ photos: firebase.firestore.FieldValue.arrayRemove(photoToDelete) })
Termino con un error que dice:
Rechazo de promesa no controlado: FirebaseError: permisos faltantes o insuficientes
¿Por qué? ¿No he dado permiso para actualizar este documento correctamente?
Vaya a Base de datos -> Reglas ->
Para desarrollo:
Cambiar allow read, write: if
falso; a verdadero;
Nota: Es una solución rápida solo para fines de desarrollo porque desactivará toda la seguridad. Por lo tanto, no se recomienda para la producción.
Para la producción:
Si se autentica desde firebase: Change allow read, write: if
falso; a request.auth != null;
En este caso, se pasó un parámetro incorrecto. Necesitaba pasar activeReport, no activeReport.id.
Este es un mensaje de error engañoso. Eliminaría esta pregunta, pero stackoverflow no quiere que lo haga porque se ha publicado una respuesta aquí. Tonto.