Я создаю способ для суперпользователей взять на себя управление учетной записью другого пользователя, но разрешить ведение журнала, чтобы показать, что все действия, выполненные в это время, выполняются суперпользователем.
Идея, которую я имею в настоящее время, заключается в обработкезапрос в промежуточном программном обеспечении и искать конкретный заголовок.Если этот заголовок существует, я заменю текущий request.user на пользователя, указанного в заголовке.В настоящее время промежуточное программное обеспечение выглядит следующим образом:
class ControlledUserMiddleware(MiddlewareMixin):
def process_request(self, request):
controlled_user = request.META.get('HTTP_CONTROLLED_USER', None)
if controlled_user:
request.user = User.objects.get(uuid=controlled_user)
Я обнаружил, что - несмотря на то, что я поместил его после промежуточного программного обеспечения auth в моем файле настроек - пользователь в запросе всегда является «анонимным пользователем», когда ондостигает этой функции.
Этот метод в настоящее время не работает, и мне было интересно, можно ли вообще отредактировать request.user до того, как он достигнет логики представления.
Редактировать, как требуется в комментариях,Вот настройки REST_FRAMEWORK
:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated'
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.FormParser',
]
}