Как сделать определенные поля данных доступными для чтения в документе Firestore

#firebase #google-cloud-firestore #firebase-security

#firebase #google-облако-firestore #firebase-безопасность

Вопрос:

Мой вопрос

Возможно ли создать правила firebase таким образом, чтобы пользователь мог read использовать определенные поля данных в документе, но not read другие правила в том же документе?

Я задаю этот вопрос, потому что хочу, чтобы пользователи могли запрашивать данные из документов, но только определенные поля в документе.

Например

Предположим, что у вас есть следующие данные в документе-истории:
/stories/{storyid}

 {
  title: "A Great Story",
  content: "Once upon a time...",
  author: "some_auth_id",
  published: false
}
 

В приведенном ниже примере я попытался создать правило, позволяющее пользователям read/query указывать автора документа (но не другие поля документа — например, заголовок).
Обратите внимание, что я добавил /stories/{storyid}/{author}

 service cloud.firestore {
  match /databases/{database}/documents {
    match /stories/{storyid}/{author} {
      allow read: if request.auth != null;
    }
  }
}
 

Как мне создать такое правило?

Комментарии:

1. Вы смотрели Официальную документацию ?

Ответ №1:

Я предполагаю, что вы имеете в виду: «Возможно ли создать правила firebase таким образом, чтобы пользователь мог читать определенные поля данных в документе, но не читать другие поля в том же документе?»

На самом деле это невозможно: правила безопасности Firestore применяются на уровне документа.

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

Комментарии:

1. Спасибо за ответ, но этим полям нравится плохой подход, потому что тогда вы получите дублирующиеся данные, это единственный способ решить проблему?

2. «это единственный способ решить проблему?» Да. Обратите внимание, что в мире NoSQL очень часто дублируются данные, в частности, для удовлетворения такого рода функциональных требований.

3. Почему бы не классифицировать данные в зависимости от уровней авторизации? Это может быть хорошей идеей