Правила военнослужащих получить доступ к собственным данным, публичные сведения или конкретные данные только


Правила военнослужащих получить доступ к собственным данным, публичные сведения или конкретные данные только

15.06.2020 11:49:39 Просмотров 23 Источник

я хочу добиться следующего с помощью правила firebase и firebase-запросов. (Я использую firestore и vuejs)

Предварительное условие: пользователь должен быть авторизирован в любом случае

  1. Пользователю разрешено read/write все его собственные созданные данные-записи
  2. Пользователю разрешено read все данные, которые имеют поле (в моем случае "visibility"), установленное в "public"
  3. Пользователь может читать определенные записи, если у него есть id записи, даже если поле "visibility" записи установлено равным "public" (например, "private")

Предположим, что это записи из моей коллекции

Первая запись создана от пользователя-а, вторая-от пользователя-В и третья-от пользователя-с:

Так:

  1. Пользователь-B должен быть разрешен к read/write второй записи (и так далее для других пользователей)
  2. Пользователь-А,В, С должен быть допущен к read первой и третьей записи.
  3. Пользователь-A, C должен быть допущен к read второй записи, если он знает идентификатор документа firebase через прямой запрос document-id или около того. как read1

Второй вопрос: нужно ли мне вообще поле read2, чтобы иметь возможность фильтровать запрос на основе созданных пользователем документов? Или firebase имеет встроенную функциональность для извлечения самостоятельно созданных документов на основе (аутентификации)?

read3

Может ли кто-нибудь помочь мне с созданием правил и запросов? (я использую этот пакет npm)

это запрос, который у меня есть прямо сейчас для извлечения самостоятельно созданных записей

read4

и это для созидания

read5

и это правило у меня есть до сих пор

read6
У вопроса есть решение - Посмотреть?

Ответы - Правила военнослужащих получить доступ к собственным данным, публичные сведения или конкретные данные только / Firebase rule to access own data, public data or specific data only

Является ответом!
Frank van Puffelen

15.06.2020 06:15:59

Firestore не связывает автоматически документы с пользователем, который вызывает их создание. Если вам нужны такие метаданные, вам нужно будет хранить их в каждом документе, как вы делаете это сейчас.

Чтобы убедиться, что пользователь может читать только свои собственные документы, вам нужно две вещи:

  1. Запрос, который только пытается прочитать эти документы. У тебя это уже есть, так что ...
  2. Правила, которые разрешают запрос, но отклоняют более широкие чтения.
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null && request.auth.uid == resource.data. user_uid;
    }
  }
}

Дополнительные сведения см. Также в документации по безопасному запросу данных .


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

Помочь в развитии проекта:
Закрыть X