В моей системе есть объекты Media и User, и я использую Firebase Authentication, Storage и Firestore.
Отношения:
- Мультимедиа является автономной сущностью - и под этим я подразумеваю, что если у кого-то есть идентификатор этого носителя (идентификатор носителя) и некоторый код аутентификации (идентификатор носителя), он может загрузить носитель.
- Пользователь также должен иметь возможность загружать медиа, если у него есть действительный медиа-идентификатор и медиа-аутентификация
Требования безопасности, Пользователь или кто-то, у кого есть media-id и media-auth, должны иметь возможность загружать медиа с помощью клиента firebase и:
- Загрузите его только один раз.
- не может загрузить другой файл.
Итак, я подумал о том, чтобы создать собственную аутентификацию для медиа с UID = медиа-идентификатором, у него было бы право загружать только один файл, и только если он не существует. что-то вроде:
service firebase.storage {
match /media/{mediaId}/video.mp4 {
allow write: if resource == null && request.auth != null && request.auth.id == mediaId;
}
}
}
Проблема, с которой я сталкиваюсь, заключается в том, как дать Аутентифицированному пользователю разрешение на то же самое (у пользователя есть действительный идентификатор носителя и идентификатор носителя) и сделать это с помощью клиента firebase - это можно сделать с помощью некоторой функции. / Сервер легко, так как я могу проверить все, что я хочу перед загрузкой, но я пытаюсь избежать загрузки файлов с сервера.
Я нашел эту замечательную статью https://medium.com/@fpastorelima/per-user-storage-limit-validation-with-firebase-19ab3341492d, в которой показан способ сделать что-то похожее. Поскольку у меня уже есть собственный токен для носителя, я могу повторно подтвердить свою подлинность в качестве носителя, загрузить его и повторно подтвердить подлинность с пользователем полномочия.
Это выглядит как возможное решение, но я не могу сделать это в фоновом режиме - потому что в тот момент, когда я загружаю файл, я аутентифицируюсь как носитель и у меня не будет доступа к данным пользователей в Firestore. и доб .. так что мне нужно будет завершить, и только тогда я смогу продолжить - Проблема.
Я также подумал, что могу дать пользователю несколько временных пользовательских утверждений с помощью идентификатора носителя и добавить в правило что-то вроде этого:
service firebase.storage {
match /media/{mediaId}/video.mp4 {
allow write: if (resource == null && request.auth != null && request.auth.id == mediaId)
|| (request.auth.token.mediaId == mediaId);
}
}
}
Допустим, у меня будет работа, которая удалит это из утверждений через X минут, но я не знаю, правильно ли это используется для пользовательских утверждений ...
Правильно ли используется это пользовательское требование?
Может быть, в документации Firebase мне чего-то не хватает, что дало бы мне возможность сделать это?
Я скажу, что структура сущностей в базе данных не является окончательной - поэтому любые изменения в представлении данных, которые помогут решить эту проблему, будут приветствоваться.