DRF does not check csrf on logged out requests, to let's require login
This commit is contained in:
parent
8e15e7d0a4
commit
9bd2ef102c
1 changed files with 10 additions and 2 deletions
|
@ -273,11 +273,19 @@ class EditorViewSet(ViewSet):
|
||||||
if getattr(self, 'get', None).__name__ in ('list', 'retrieve'):
|
if getattr(self, 'get', None).__name__ in ('list', 'retrieve'):
|
||||||
if name == 'post' and (self.resolved.url_name.endswith('.create') or
|
if name == 'post' and (self.resolved.url_name.endswith('.create') or
|
||||||
self.resolved.url_name.endswith('.edit')):
|
self.resolved.url_name.endswith('.edit')):
|
||||||
return self.retrieve
|
return self.post_or_delete
|
||||||
if name == 'delete' and self.resolved.url_name.endswith('.edit'):
|
if name == 'delete' and self.resolved.url_name.endswith('.edit'):
|
||||||
return self.retrieve
|
return self.post_or_delete
|
||||||
raise AttributeError
|
raise AttributeError
|
||||||
|
|
||||||
|
def post_or_delete(self, request, *args, **kwargs):
|
||||||
|
# Django REST Framework does only check csrf on logged in requests.
|
||||||
|
# So let's make the entire writable c3nav API require a login.
|
||||||
|
if not request.user.is_authenticated:
|
||||||
|
raise PermissionDenied(_('Login required.'))
|
||||||
|
|
||||||
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
def list(self, request, *args, **kwargs):
|
def list(self, request, *args, **kwargs):
|
||||||
return self.retrieve(request, *args, **kwargs)
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue