From 6c7582f60d54d31e5c5dc194f0e8d2546944438e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 9 Dec 2018 21:04:22 +0100 Subject: [PATCH] complete base mapdata logic --- src/c3nav/editor/api.py | 11 +++++++---- src/c3nav/editor/utils.py | 2 +- src/c3nav/editor/views/edit.py | 8 ++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/c3nav/editor/api.py b/src/c3nav/editor/api.py index 995c6825..638bc20d 100644 --- a/src/c3nav/editor/api.py +++ b/src/c3nav/editor/api.py @@ -15,6 +15,7 @@ from shapely.ops import cascaded_union from c3nav.api.utils import get_api_post_data from c3nav.editor.forms import ChangeSetForm, RejectForm from c3nav.editor.models import ChangeSet +from c3nav.editor.utils import LevelChildEditUtils, SpaceChildEditUtils from c3nav.editor.views.base import etag_func from c3nav.mapdata.api import api_etag from c3nav.mapdata.models import Area, Door, MapUpdate, Source @@ -98,11 +99,12 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): if space is not None: raise ValidationError('Only level or space can be specified.') - if not request.user_permissions.can_access_base_mapdata: - raise PermissionDenied - level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level) + edit_utils = LevelChildEditUtils(level, request) + if not edit_utils.can_access_child_base_mapdata: + raise PermissionDenied + levels, levels_on_top, levels_under = self._get_levels_pk(request, level) # don't prefetch groups for now as changesets do not yet work with m2m-prefetches levels = Level.objects.filter(pk__in=levels).filter(Level.q_for_request(request)) @@ -155,7 +157,8 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): space = get_object_or_404(qs.select_related('level', 'level__on_top_of'), pk=space) level = space.level - if not request.user_permissions.can_access_base_mapdata and not space.base_mapdata_accessible: + edit_utils = SpaceChildEditUtils(space, request) + if not edit_utils.can_access_child_base_mapdata: raise PermissionDenied if request.user_permissions.can_access_base_mapdata: diff --git a/src/c3nav/editor/utils.py b/src/c3nav/editor/utils.py index a2a27efc..f8b2717b 100644 --- a/src/c3nav/editor/utils.py +++ b/src/c3nav/editor/utils.py @@ -50,7 +50,7 @@ class SpaceChildEditUtils(DefaultEditUtils): def can_access_child_base_mapdata(self): return (self.request.user_permissions.can_access_base_mapdata or self.space.base_mapdata_accessible or - self.space.pk in self.request.user_space_access) + self.space.pk in self.request.user_space_accesses) @property def _geometry_url(self): diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py index 5bbeb5c5..4db296cb 100644 --- a/src/c3nav/editor/views/edit.py +++ b/src/c3nav/editor/views/edit.py @@ -97,9 +97,9 @@ def space_detail(request, level, pk): qs = Space.objects.filter(Space.q_for_request(request)) space = get_object_or_404(qs.select_related('level'), level__pk=level, pk=pk) - can_edit = request.user_permissions.can_access_base_mapdata or space.base_mapdata_accessible + edit_utils = SpaceChildEditUtils(space, request) - if can_edit: + if edit_utils.can_access_child_base_mapdata: submodels = ('POI', 'Area', 'Obstacle', 'LineObstacle', 'Stair', 'Ramp', 'Column', 'Hole', 'AltitudeMarker', 'LeaveDescription', 'CrossDescription', 'WifiMeasurement') @@ -111,11 +111,11 @@ def space_detail(request, level, pk): 'level': space.level, 'level_url': 'editor.spaces.list', 'space': space, - 'can_edit_graph': can_edit, + 'can_edit_graph': edit_utils.can_access_child_base_mapdata, 'child_models': [child_model(request, model_name, kwargs={'space': pk}, parent=space) for model_name in submodels], - 'geometry_url': '/api/editor/geometries/?space='+pk if can_edit else None, + 'geometry_url': edit_utils.geometry_url, }, fields=('level', 'space', 'can_edit_graph', 'child_models'))