# #flutter #google-cloud-firestore
Вопрос:
Я пытаюсь отфильтровать сообщения по «Скрытому идентификатору пользователя», который представляет собой массив «идентификаторов пользователей в коллекции «отзывы». пожалуйста, посмотрите на рис. пользователь с идентификатором в массиве «hidingUserId» не увидит сообщение, которое он/она скрыл. Позже я запрошу эти сообщения и упорядочу их по звездам, лайкам и/или отметкам времени.
В симуляторе правил я могу поиграть с установленными идентификаторами, и это отлично работает. Однако, когда я тестирую приложение на телефоне, я получаю следующую ошибку:
[Firestore]: Listen for Query(target=Query(reviews order by -stars, - timestamp, -__name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
Не все сообщения имеют «Идентификатор пользователя», так как не все сообщения будут скрыты пользователями. Мои правила firestore таковы:
match /reviews/{review}{ allow read: if request.auth != null amp;amp; !(request.auth.uid in resource.data.hidingUserId) allow delete, update, create: if request.auth != null }
спасибо вам за помощь!
Ответ №1:
String myID = FirebaseAuth.instance.currentUser.uid; var idofotheruser = await FirebaseFirestore.instance .collection('reviews') .where('hidingUserId' arrayContains: myID ) //.get or .snapshot .get();
Комментарии:
1. спасибо, но у меня возникли проблемы с . где() и .OrderBy(). я упорядочиваю сообщения в соответствии со звездами, затем лайками, затем отметкой времени и звездами по убыванию. всякий раз, когда у меня есть .where (), я получаю ошибки, требующие, чтобы .OrderBy() был тем же полем. это было очень запутанно.
2. у вас не может возникнуть проблем с использованием where и упорядочением таким образом, поделитесь своим кодом… я верю, что вы используете doc() с where…
3. кроме того, массив не должен содержать идентификатор пользователя, так как пользователь скрыл сообщение, чтобы его не видеть, поэтому оно не должно отображаться на стене/экране пользователя..я этого не понимаю
4. прошу прощения! 🙂 пользователь скрывает сообщения, а идентификатор пользователя устанавливается в массиве ‘hidingUserId’. затем этот пользователь видит только сообщения, которые он/она не скрывал, другими словами, массив ‘hidingUserId’ не содержит его/ее идентификатор пользователя. если мы воспользуемся вашим предложением, то сообщения, скрытые пользователем, будут видны пользователю.
5. я занят на северо-западе, я почитаю и вернусь к вам… пожалуйста..