【发布时间】:2019-07-26 00:04:55
【问题描述】:
我正在为超级用户创建一种方式来控制另一个用户的帐户,但允许记录显示在此期间执行的所有操作都是由超级用户完成的。
我目前的想法是在中间件中处理请求并寻找特定的标头。如果该标头存在,我会将当前 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 到达视图逻辑之前对其进行编辑。
根据 cmets 的要求进行编辑,这里是 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',
]
}
【问题讨论】:
-
我觉得这个主意不好。因为无法区分普通用户和超级用户的日志会很头疼。
-
所以,我的建议是,向超级用户提供此类操作的访问/权限。
-
我在日志中添加了一个额外的列,因此所有日志看起来都正常,除了那些包含添加的“受控用户”的日志,这将显示用户在执行请求时的行为.尽管如此——纯粹为了科学——是否可以覆盖 request.user?
-
我还没试过。你的状态呢?你的 sn-p 工作正常吗?\
-
请分享您的
REST_FRAMEWORK设置。 DRF 的DEFAULT_AUTHENTICATION_CLASSES(如果您已定义)应该提供一些提示。
标签: django python-3.x django-rest-framework django-middleware