Как обрабатывать права доступа к загружаемым медиафайлам в 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.

Вернуться на верх