Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
Reglas de Firestore usando obtener devoluciones permisos insuficientes

Estoy haciendo una consulta a firestore usando:

 setDoc(doc(db, "vendors", this.vendorId), { title: "test listing", vendorId: this.vendorId }, {merge: true}).then(i => { console.log("i", i) }).catch(e => { console.log("error", e) })

Tengo 2 colecciones la primera tiene una subcolección

Colección usuarios/${userId}

 { "userId": "123.uuu", "role": "vendor" }

Usuarios de subcolección/${userId}/vendors/${vendorId}

 { "user": "123.uuu", "vendor": "123..vvv" }

La segunda colección es Proveedores de colección/${vendorId}

 { "userId": "123.uuu", "role": "vendor" }

Quiero poder actualizar los proveedores de la segunda colección/${vendorId}, pero solo si la subcolección de usuarios users/${userId}/vendors/${vendorId} existe y, por lo tanto, tiene acceso a ella.

La siguiente regla no funciona: devuelve FirebaseError: Permisos faltantes o insuficientes.

 match /vendors/{vendorId}{ allow update: if get(/databases/$(database)/documents/users/$(request.auth.uid)/vendors/$(vendorId)).data.user == request.auth.uid }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Según @Doug Stevenson: "Las reglas de seguridad no significan nada a menos que se combinen con el código que realiza la consulta", puede intentar seguir el código de ejemplo a continuación que funciona al replicar en mi extremo:

 // Where the user.uid is the users document id; // and the vendorId is the value of the "user" under vendors' sub-collection const userRef = doc(db, "users", {user.uid}, "vendors", {vendorId}); const userSnap = await getDoc(userRef); if (userSnap.exists()){ // Where the vendorId is the value of the user under vendors' collection await setDoc(doc(db, "vendors", {vendorId}), { title: "test listing", vendorId: this.vendorId }, {merge: true}).catch(e => { console.log("error", e); }) } else{ // doc.data() will be undefined in this case console.log("No such document!"); }

Además, siguiendo la respuesta de @Dharmaraj, puedes probar esta regla:

 match /vendors/{vendorId} { // 'user' field in collection 'vendors', and users' sub-collection 'vendors', should have the same value for this rule to work // this will check 'vendors' and users' sub-collection 'vendors' user field if its the same or not allow read, create, update: if resource.data.user == request.auth.uid && request.auth.uid != null }

Para obtener más información, puede consultar la siguiente guía:

Cómo reparar el error de Firestore: PERMISSION_DENIED: Permisos faltantes o insuficientes

about 4 years ago · Juan Pablo Isaza Denunciar

0

allow update solo permitirá operaciones de actualización, es decir, el documento ya debe existir. Dado que está usando setDoc() , eso significa que se está creando un nuevo documento si aún no existe. Intenta permitir create también:

 allow create, update: if ....;

Consulte la documentación sobre las reglas de seguridad y también este Firecast

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda