GOOGLE ADS

miércoles, 4 de mayo de 2022

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección.

Tengo algunos requestsdocumentos que pueden presentar una subcolección llamada status. Mis reglas actuales son algo así:

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

// I use it to check if user is signed in
function userSignedIn() {
return request.auth!= null;
}

match /requests/{requestId} {

// I use it to check if user is the owner of the request
function userCanAccess () {
return userSignedIn() && request.auth.uid == get(/databases/$(database)/documents/requests/$(requestId)).data.userId;
}


// allow read to logged user who own request
allow read, update: if userCanAccess();

// anyone can create a new request
allow create: if true;

// no one can delete the request
allow delete: if false;



match /status/{statusId} {
// allow read and update of status to logged user who own request
allow read, update: if userCanAccess();

// anyone can create the status
allow create: if true;

// no one can delete the status
allow delete: if false;
}
}
}
}

Mi primera forma de verificar si el usuario tenía acceso fue por request.auth.uid == resource.data.userId, sin embargo, solo funciona para requestsdocumentos, no para statusdocumentos, ya que no tienen el userIdcampo.

Estoy usando flutter para hacer la solicitud con el código:

FirebaseFirestore.instance
.collection('requests')
.where('userId', isEqualTo: user.uid)
.orderBy('requestedOn', descending: true)
.snapshots()
.listen((snapshot) {
// Here I read requests and their status
});

Sin embargo, estoy recibiendo Error: [cloud_firestore/permission-denied] Missing or insufficient permissions.. ¿Cómo puedo resolverlo (o depurarlo)? Usando las reglas del patio de recreo en firestore, con exactamente lo mismo uid, puedo completar la lectura.


Solución del problema


Me pregunto si la get()llamada puede estar causando problemas. Prueba esto:

function userCanAccess () {
return userSignedIn() && request.auth.uid == requestId.data.userId;
}

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...