Правило Firestore — запрос поля документа без раскрытия всей коллекции

У меня есть users коллекция, в которой есть документы, содержащие различные поля. Каждый идентификатор документа — это идентификатор пользователя firebase, а поля содержат пользовательские данные.

Я использую следующее правило:

match /databases/{database}/documents { // Make sure the uid of the requesting user matches name of the user document. match /users/{userId} { allow read, update, delete: if request.auth.uid == userId; allow create: if request.auth.uid != null; } }

Пользователи могут выбирать любимые песни, которые сохраняются в поле массива. Теперь у меня есть требование запрашивать в базе данных пользователей, которые добавили определенные песни в избранное. Я создал следующий запрос:

FirebaseFirestore db = FirebaseFirestore.getInstance(); CollectionReference usersRef = db.collection(«users»); usersRef.whereArrayContains(«favouriteSongs», «id_of_song»);

При выполнении запроса возвращается следующая ошибка:

com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: разрешения отсутствуют или недостаточны.

Очевидно, мне нужно изменить правило Firestore, чтобы пользователь мог запрашивать поле favouriteSongs; однако я не хочу, чтобы все пользовательские данные были доступны всем.

Есть ли способ раскрыть данные favouriteSongs (которые содержат только идентификаторы) и гарантировать, что чтение остальной части пользовательской коллекции ограничено?

Спасибо

Если вы хотите показать пользователю только часть документа, то ответ DarkNeuron правильный. Мне просто интересно, если вы на самом деле не интересуетесь как безопасно запрашивать данные < / а>.   —  person Michael J    schedule 25.09.2020

Источник: ledsshop.ru

Стиль жизни - Здоровье!