complete base mapdata logic
This commit is contained in:
parent
1d8e38bc96
commit
6c7582f60d
3 changed files with 12 additions and 9 deletions
|
@ -15,6 +15,7 @@ from shapely.ops import cascaded_union
|
||||||
from c3nav.api.utils import get_api_post_data
|
from c3nav.api.utils import get_api_post_data
|
||||||
from c3nav.editor.forms import ChangeSetForm, RejectForm
|
from c3nav.editor.forms import ChangeSetForm, RejectForm
|
||||||
from c3nav.editor.models import ChangeSet
|
from c3nav.editor.models import ChangeSet
|
||||||
|
from c3nav.editor.utils import LevelChildEditUtils, SpaceChildEditUtils
|
||||||
from c3nav.editor.views.base import etag_func
|
from c3nav.editor.views.base import etag_func
|
||||||
from c3nav.mapdata.api import api_etag
|
from c3nav.mapdata.api import api_etag
|
||||||
from c3nav.mapdata.models import Area, Door, MapUpdate, Source
|
from c3nav.mapdata.models import Area, Door, MapUpdate, Source
|
||||||
|
@ -98,11 +99,12 @@ class EditorViewSet(EditorViewSetMixin, ViewSet):
|
||||||
if space is not None:
|
if space is not None:
|
||||||
raise ValidationError('Only level or space can be specified.')
|
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)
|
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)
|
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
|
# 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))
|
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)
|
space = get_object_or_404(qs.select_related('level', 'level__on_top_of'), pk=space)
|
||||||
level = space.level
|
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
|
raise PermissionDenied
|
||||||
|
|
||||||
if request.user_permissions.can_access_base_mapdata:
|
if request.user_permissions.can_access_base_mapdata:
|
||||||
|
|
|
@ -50,7 +50,7 @@ class SpaceChildEditUtils(DefaultEditUtils):
|
||||||
def can_access_child_base_mapdata(self):
|
def can_access_child_base_mapdata(self):
|
||||||
return (self.request.user_permissions.can_access_base_mapdata or
|
return (self.request.user_permissions.can_access_base_mapdata or
|
||||||
self.space.base_mapdata_accessible 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
|
@property
|
||||||
def _geometry_url(self):
|
def _geometry_url(self):
|
||||||
|
|
|
@ -97,9 +97,9 @@ def space_detail(request, level, pk):
|
||||||
qs = Space.objects.filter(Space.q_for_request(request))
|
qs = Space.objects.filter(Space.q_for_request(request))
|
||||||
space = get_object_or_404(qs.select_related('level'), level__pk=level, pk=pk)
|
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',
|
submodels = ('POI', 'Area', 'Obstacle', 'LineObstacle', 'Stair', 'Ramp', 'Column',
|
||||||
'Hole', 'AltitudeMarker', 'LeaveDescription', 'CrossDescription',
|
'Hole', 'AltitudeMarker', 'LeaveDescription', 'CrossDescription',
|
||||||
'WifiMeasurement')
|
'WifiMeasurement')
|
||||||
|
@ -111,11 +111,11 @@ def space_detail(request, level, pk):
|
||||||
'level': space.level,
|
'level': space.level,
|
||||||
'level_url': 'editor.spaces.list',
|
'level_url': 'editor.spaces.list',
|
||||||
'space': space,
|
'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)
|
'child_models': [child_model(request, model_name, kwargs={'space': pk}, parent=space)
|
||||||
for model_name in submodels],
|
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'))
|
}, fields=('level', 'space', 'can_edit_graph', 'child_models'))
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue