Правила безопасности Firebase — сравнение строк параметра

#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. Можете ли вы показать, что данные в базе данных соответствуют данным, которые вы указали в запросе? Мы пока этого не видим.