Запрос одного документа на основе одного поля Firestore - PullRequest
0 голосов
/ 16 февраля 2020

Недавно я работал с React и Firebase, чтобы создать проект, в котором мне нужно было бы найти определенные c документы в моей коллекции на основе их полей.

В настоящее время единственный способ сделать это следующим образом:

let ref = myFirebase.firestore().collection("Users");
let refQuery = ref.where('Token', '==', userUID);

Это даст мне результат, который я ищу, но в моих правилах мне придется разрешить моему пользователю allow list или allow read для коллекции Users. Насколько я понимаю, это будет потенциальная опасность, потому что я разрешаю пользователю go через всех пользователей в моей коллекции. Вместо этого я хочу, чтобы мои правила оставались равными allow get, поэтому только пользователь может получить свою собственную информацию, но она не будет работать с моим кодом запроса выше.

В любом случае я могу изменить свой Реагируйте на код запроса, чтобы мои правила в моей коллекции Users были доступны только для allow get?

Вот фрагмент из моих правил, который я хочу реализовать:

match /Users/{UsersDoc} {
    allow create: if request.auth.uid != null;
    allow update, delete, get: if request.auth.uid == resource.data.Token;
}

1 Ответ

0 голосов
/ 16 февраля 2020

allow get работает только для отдельных документов, а не для запросов.

То, что у вас есть сейчас, на самом деле именно то, что вы хотите, за исключением того, что вы просто хотите применить его для доступа к чтению:

allow update, delete, read: if request.auth.uid == resource.data.Token;

Это не позволяет пользователю "go через всех пользователей", как вы предлагаете. Это заставляет пользователя запрашивать пользователей только с тем фильтром на токене, который вам необходим. Любой другой запрос, который не фильтруется правильно на токене, будет отклонен. Это то, что вы сможете довольно легко протестировать.

...