#django #amazon-web-services #amazon-s3 #django-rest-framework
Вопрос:
У меня есть модель, которая в основном сохраняет файлы/изображения для каждого конкретного пользователя, и только этот пользователь сможет просматривать свой файл, другие пользователи не могут просматривать личные файлы/изображения других.
def user_id_directory(instance, file):
return f"{instance.id}/{file}"
class PrivateFile(models.Model):
owner = models.ForeignKey(to=UserModel, on_delete=models.CASCADE)
image = models.ImageField(upload_to=user_id_directory)
created = models.DateTimeField(auto_now_add=True)
Я использую s3 для сохранения медиафайлов, но при использовании s3 будет оставлена ссылка, доступ к которой может получить любой другой пользователь
Предположим, есть файл с именем FILE1, который имеет идентификатор 1, и я создал API, который возвращает следующую схему JSON.
{
"id": 1,
"user": 1,
"image": "example.aws.com/Media/File/1/image.png?AccessID=...."
"created": "2021-09-09 09:09:09.25555",
}
Если я дам эту ссылку кому-либо, даже неавторизованный пользователь сможет просмотреть этот файл, используя эту ссылку, как я могу ограничить его только пользователем, который является владельцем файла, только он/она сможет просмотреть его по ссылке.
Комментарии:
1. Как вы создали URL-адрес изображения? Похоже, это не URL-адрес с предварительной подписью S3 , который вы обычно используете в этом случае. Ваше приложение, конечно, должно передавать подписанный URL-адрес для данного файла только правильному, аутентифицированному клиенту. Если вы предпочитаете использовать прокси-сервер для загрузки, ваше приложение должно проверить сеанс, соответствующий запросу на загрузку.