В firestore я хочу, чтобы пользователь имел доступ только к документу, если пользователь находится в teamid упомянутой в документе. Теперь у меня есть другая коллекция, называемая teams где у меня есть пользователи, сопоставленные как { user_id = true }. Поэтому в правилах Firestore есть следующее:
return get(/databases/$(database)/documents/teams/$(resource.data.teamid)).data.approvedMembers[request.auth.uid] == true;
Теперь это правило не работает и не выполняет запрос, запрошенный в базу данных интерфейсом. Но когда я заменю $(resource.data.teamid) моим фактическим значением teamid следующим образом,
return get(/databases/$(database)/documents/teams/234234jk2jk34j23).data.approvedMembers[request.auth.uid] == true;
... он работает так, как ожидалось.
Теперь мой вопрос заключается в том, что я неправильно использую resource или не поддерживается resource в запросах get() или exists() в правилах Firestore?
Править
service cloud.firestore {
match /databases/{database}/documents {
function isTeamMember() {
return get(/databases/$(database)/documents/teams/$(resource.data.teamid)).data.approvedMembers[request.auth.uid] == true;
// return exists(/databases/$(database)/documents/teams/$(resource.data.teamid));
}
match /{document=**} {
allow read, write: if isTeamMember();
}
}
}
Если вы заметили правило с комментариями, exists() также не работает в этом случае.