Я пытаюсь найти наиболее разумный способ обработки доступа к файлам с помощью служб Google.
Упрощая сценарий, мы имеем
- пользователей (любое число), которые могутпроверять подлинность с помощью Google, Facebook и т. д., т. е. необязательно с учетными записями Google.
- Пользователи могут принадлежать к любому количеству групп (эквивалентно, например, каналам Slack), без ограничения количества пользователей в группе.или сколько групп могут принадлежать пользователи.
- Каждый файл принадлежит одной группе.
В идеальном (для меня) мире я должен быть в состоянии обеспечить (быстрый) Облачная функция, которая проверяет доступ для каждого запроса, делая все, что я хочу.Я попробовал это, и у меня есть функция, которая выполняет проверки (путем запроса к firestore) и генерирует недолговечный подписанный URL.Это работает, но функция может быть очень медленной для запуска, и даже в лучшем случае (никакой холодной загрузки не требуется) она по-прежнему занимает около 400 мс, что заметно, когда файлы представляют собой небольшие изображения, которые должны мгновенно появляться.
Итак, следующая альтернатива - использование правил безопасности пожарного депо.У меня проблема в том, что (по-видимому) я нигде не могу проверить членство в группе (примечание: для нас «groups» - это коллекция в / users / $ uuid /, содержащая список идентификаторов групп).
Я рассмотрел возможность использования групп в качестве утверждений в токене, но поскольку утверждения могут использовать только 1000 байтов, это решение не допускается.
Существуют также группы Google, но если я правильно прочитал документацию, вы можете добавлять в группы только учетные записи Google (я имею в виду, чтобы обрабатывать доступ напрямую с помощью хранилища, а не безопасности Firebase).
Этокажется, что это действительно стандартная проблема, но каждый из подходов, которые я видел до сих пор, имеет некоторый недостаток, который делает нас недействительными.