Как обрабатывать права доступа к загружаемым медиафайлам в django?
Как безопасно работать с медиафайлами в Django и Django REST Framework?
По сути, файлы должны быть приватными.
Например, предположим, что это сайт цифрового продукта, где покупатель получит доступ к файлу только в том случае, если приобретет цифровой продукт. В противном случае файл продукта должен быть приватным.
Я могу управлять правами доступа в DRF и Django views. Но обычно медиафайлы не являются приватными, к ним можно легко получить доступ по URL. Если один покупатель купит и поделится ссылкой на файл с другими, все смогут скачать его даже без создания учетной записи. Как же мне с этим справиться? Также как я могу работать с видеофайлами, которые нужно транслировать на фронтенд?
Я думаю, вам нужно создать другую модель для файлов, например DocumentModel
, в ней вы сможете сохранять в хранилище s3 и легко контролировать, кто может получить доступ.
Попробуйте сделать это с помощью промежуточного ПО. Используя request.user
, вы можете получить экземпляр пользователя и таким образом проверить эти разрешения.
# your_app/middleware/PermissionMiddleware.py
class PermissionMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
user = request.user
permission = """Your code"""
if not permission:
raise Http404()
return response
# settings.py
MIDDLEWARE = [
"your_app.middleware.PermissionMiddleware",
...
]
Но помните, что это будет применяться ко всем URL, и вам придется дополнительно проверять URL.