let's to allow_post and allow_delete differently

This commit is contained in:
Laura Klünder 2018-11-21 22:44:31 +01:00
parent 2113487c51
commit 0b6321c7e0
3 changed files with 10 additions and 10 deletions

View file

@ -269,10 +269,13 @@ class EditorViewSet(ViewSet):
def __getattr__(self, name):
# allow POST and DELETE methods for the editor API
if name in ('post', 'delete'):
if getattr(self.resolved.func, 'allow_'+name, False):
if getattr(self, 'get', None).__name__ in ('list', 'retrieve'):
return self.retrieve
if getattr(self, 'get', None).__name__ in ('list', 'retrieve'):
if name == 'post' and (self.resolved.url_name.endswith('.create') or
self.resolved.url_name.endswith('.edit')):
return self.retrieve
if name == 'delete' and self.resolved.url_name.endswith('.edit'):
return self.retrieve
raise AttributeError
def list(self, request, *args, **kwargs):

View file

@ -22,11 +22,10 @@ from c3nav.mapdata.models.base import SerializableMixin
from c3nav.mapdata.utils.user import can_access_editor
def sidebar_view(func=None, select_related=None, api_hybrid=False, allow_post=False, allow_delete=False):
def sidebar_view(func=None, select_related=None, api_hybrid=False):
if func is None:
def wrapped(inner_func):
return sidebar_view(inner_func, select_related=select_related, api_hybrid=api_hybrid,
allow_post=allow_post, allow_delete=allow_delete)
return sidebar_view(inner_func, select_related=select_related, api_hybrid=api_hybrid)
return wrapped
@wraps(func)
@ -67,8 +66,6 @@ def sidebar_view(func=None, select_related=None, api_hybrid=False, allow_post=Fa
return response
wrapped.api_hybrid = api_hybrid
wrapped.allow_post = allow_post
wrapped.allow_delete = allow_delete
return wrapped

View file

@ -122,7 +122,7 @@ def get_changeset_exceeded(request):
return request.user_permissions.max_changeset_changes <= request.changeset.changed_objects_count
@sidebar_view(api_hybrid=True, allow_post=True, allow_delete=True)
@sidebar_view(api_hybrid=True)
@etag(etag_func)
def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, explicit_edit=False):
changeset_exceeded = get_changeset_exceeded(request)