Для нашего приложения мы должны иметь возможность предлагать группам доступ к файлам. У каждого пользователя может быть большое количество групп, поэтому не имеет смысла использовать решение «пользовательский токен» (которое в любом случае очень неудобно.
Как я обнаружил, Firebase очень ограничен правилами безопасности хранилища. Основная проблема заключается в том, что мы сохраняем определения групп в Firestore, к которым правила безопасности хранилища не имеют доступа.
Чтобы преодолеть это, мы решили включить в метаданные каждого загруженного файла «токен», который любой вГруппа имеет доступ к. Когда они загружают файл, им нужно предоставить этот токен в параметрах запроса (например, /groups/xxx/filename.jpg?token=abc).
Поэтому я пошел дальше и написал этиправила:
match /groups/{groupId}/{filename} {
allow read: if request.auth != null && request.params.token == resource.metadata.token;
allow write: if request.auth.uid == userId
&& request.resource.size < 1 * 1024 * 1024
&& request.resource.contentType.matches('image/.*')
&& (resource == null || request.resource.contentType == resource.contentType)
&& imageId.size() < 32
;
}
Но когда я запускаю его в симуляторе, я получаю ошибку: «Ошибка: строка simulator.rules [23], столбец [43]. Свойство params не определено для объекта.», которое указываетк правилу с "request.params.token"
Документация специальнозаявляет, что мы имеемсс к объекту params из объекта запроса: https://firebase.google.com/docs/storage/security/secure-files?authuser=0#request_evaluation