В 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()
также не работает в этом случае.