Я создаю приложение React Native и только начинаю создавать все правила безопасности в моей базе данных Firestore.У меня есть несколько правил, которые работают хорошо, но есть одно правило, которое в значительной степени идентично рабочим, которое дает мне Error: Missing or insufficient permissions.
Что еще более странно, что когда я проверяю это правило в симуляторе Firestore, оно проходит без каких-либо проблем.
Я пытался вытолкнуть всю условную логику из функций в само правило, но это ничего не дало.
Вот соответствующие правила:
service cloud.firestore {
match /databases/{database}/documents {
function getCurrentTeam() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.lastTeam;
}
function signedIntoTeam() {
// For context, all "like" documents have an associated teamId.
return request.auth.uid != null && getCurrentTeam() == resource.data.teamId;
}
match /likes/{like} {
allow read: if signedIntoTeam();
}
}
}
Вотфункция в моем приложении React Native, которая выдает ошибку:
const getLikes = posts =>
new Promise((resolve, reject) => {
const likedPosts = [];
if (!posts.length) return resolve(likedPosts);
posts.forEach(post => {
if (post.likeCount > 0) {
firebase
.firestore()
.collection('likes')
.where('postId', '==', post.id)
.where('userId', '==', firebase.auth().currentUser.uid)
.get()
.then(querySnapshot => {
const likedByUser = querySnapshot.size > 0;
likedPosts.push({ ...post, likedByUser });
if (likedPosts.length === posts.length) resolve(likedPosts);
})
.catch(err => reject(err));
} else {
likedPosts.push({ ...post, likedByUser: false });
if (likedPosts.length === posts.length) resolve(likedPosts);
}
});
});
У меня есть очень похожие функции и правила, которые отлично работают в других местах.Я просто не могу понять, почему именно этот сбой.