Можно ли установить правила хранения, используя firestore Firebase?

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

#google-cloud-firestore #firebase-хранилище #firebase-безопасность

Вопрос:

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

Вот мой пример:

В моей базе данных firestore у меня есть users коллекция с именем items collection . Путь выглядит следующим образом: /users/items/{itemId}

Я хочу, чтобы пользователь мог читать и записывать файл в хранилище по этому пути: /items/{id}/file.png только если {id} элемент уже существует в items коллекции базы данных firestore. Есть ли способ правильно установить правила в хранилище с помощью firestore?

Я попробовал это:

 service firebase.storage {
  match /b/{bucket}/o {
    match /items/{item}/{allPaths=**} {
        allow read, write: if exists(/databases/{database}/documents/users/$(request.auth.uid)/items/$(item));
    }
  }
}
  

Но это не работает :/

Спасибо за вашу помощь!

Ответ №1:

Обновление (октябрь 2022): теперь можно получить доступ к облачному хранилищу Firestore из правил безопасности вашего облачного хранилища с помощью новой firestore.get() firestore.exists() функции and . См. Сообщение в блоге, в котором объявляются правила безопасности для разных служб, и документацию по улучшению правил безопасности облачного хранилища с помощью Cloud Firestore.

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


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