#google-cloud-firestore #firebase-security
#google-cloud-firestore #firebase-безопасность
Вопрос:
Я хочу создать коллекцию «чатов» между двумя пользователями, которая позволит им обоим получить доступ к одной и той же коллекции. Коллекции представляют собой объединенный набор их пользовательских идентификаторов Firestore («UID1_UID2»). Таким образом, я написал правило безопасности, которое должно быть:
match /chats/{combinedUserIDs}/messages{
allow update, read: if request.auth != null amp;amp; request.auth.uid == combinedUserIDs[0:27];
allow update, read: if request.auth != null amp;amp; request.auth.uid == combinedUserIDs[29:56];
}
Я пытаюсь сопоставить по подстроке, но это не работает, и мне отказывают. Могу ли я сопоставить параметр с подстрокой, как я это сделал?
Код на стороне клиента из вызова из Flutter (работает идеально, если правило установлено для всех пользователей, прошедших проверку подлинности):
await firestore
.collection('chats')
.document(orderedUserIDs)
.collection('messages')
.orderBy('timestamp', descending: true)
.limit(documentLimit)
.getDocuments();
Комментарии:
1. Правила безопасности сами по себе ничего не делают. Пожалуйста, отредактируйте вопрос, чтобы показать клиентский код с запросом, который работает не так, как вы ожидаете. Из вашего вопроса должно быть ясно, что правила должны либо разрешать, либо запрещать запрос с использованием кода и данных документа, которые они будут использовать.
2. @DougStevenson добавил приведенный выше код на стороне клиента
3. Можете ли вы показать, что данные в базе данных соответствуют данным, которые вы указали в запросе? Мы пока этого не видим.