cascade space and level access restrictions
This commit is contained in:
parent
303c4be485
commit
fbb77a3d13
4 changed files with 39 additions and 4 deletions
|
@ -257,10 +257,6 @@ class AccessRestrictionMixin(SerializableMixin, models.Model):
|
||||||
])
|
])
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def qs_for_request(cls, request, allow_none=False):
|
|
||||||
return cls.objects.filter(cls.q_for_request(request, allow_none=allow_none))
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def q_for_request(cls, request, prefix='', allow_none=False):
|
def q_for_request(cls, request, prefix='', allow_none=False):
|
||||||
if request is None and allow_none:
|
if request is None and allow_none:
|
||||||
|
|
|
@ -2,6 +2,7 @@ from collections import OrderedDict
|
||||||
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models import Q
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils.translation import get_language, get_language_info
|
from django.utils.translation import get_language, get_language_info
|
||||||
|
|
||||||
|
@ -45,6 +46,14 @@ class SerializableMixin(models.Model):
|
||||||
def title(self):
|
def title(self):
|
||||||
return self._meta.verbose_name + ' ' + str(self.id)
|
return self._meta.verbose_name + ' ' + str(self.id)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def qs_for_request(cls, request, allow_none=False):
|
||||||
|
return cls.objects.filter(cls.q_for_request(request, allow_none=allow_none))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def q_for_request(cls, *args, **kwargs):
|
||||||
|
return Q()
|
||||||
|
|
||||||
|
|
||||||
class TitledMixin(SerializableMixin, models.Model):
|
class TitledMixin(SerializableMixin, models.Model):
|
||||||
title = I18nField(_('Title'), plural_name='titles', blank=True, fallback_any=True, fallback_value='{model} {pk}')
|
title = I18nField(_('Title'), plural_name='titles', blank=True, fallback_any=True, fallback_value='{model} {pk}')
|
||||||
|
|
|
@ -80,6 +80,13 @@ class LevelGeometryMixin(GeometryMixin):
|
||||||
def register_delete(self):
|
def register_delete(self):
|
||||||
changed_geometries.register(self.level_id, self.geometry)
|
changed_geometries.register(self.level_id, self.geometry)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def q_for_request(cls, request, prefix='', allow_none=False):
|
||||||
|
return (
|
||||||
|
super().q_for_request(request, prefix=prefix, allow_none=allow_none) &
|
||||||
|
Level.q_for_request(request, prefix=prefix+'level__', allow_none=allow_none)
|
||||||
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
self.register_change()
|
self.register_change()
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
|
@ -11,6 +11,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
|
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
|
||||||
|
|
||||||
from c3nav.mapdata.fields import GeometryField, I18nField, JSONField
|
from c3nav.mapdata.fields import GeometryField, I18nField, JSONField
|
||||||
|
from c3nav.mapdata.models import Space
|
||||||
from c3nav.mapdata.models.base import SerializableMixin
|
from c3nav.mapdata.models.base import SerializableMixin
|
||||||
from c3nav.mapdata.models.geometry.base import GeometryMixin
|
from c3nav.mapdata.models.geometry.base import GeometryMixin
|
||||||
from c3nav.mapdata.models.locations import SpecificLocation
|
from c3nav.mapdata.models.locations import SpecificLocation
|
||||||
|
@ -57,6 +58,13 @@ class SpaceGeometryMixin(GeometryMixin):
|
||||||
level=space.title)
|
level=space.title)
|
||||||
return base_subtitle
|
return base_subtitle
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def q_for_request(cls, request, prefix='', allow_none=False):
|
||||||
|
return (
|
||||||
|
super().q_for_request(request, prefix=prefix, allow_none=allow_none) &
|
||||||
|
Space.q_for_request(request, prefix=prefix + 'space__', allow_none=allow_none)
|
||||||
|
)
|
||||||
|
|
||||||
def register_change(self, force=True):
|
def register_change(self, force=True):
|
||||||
space = self.space
|
space = self.space
|
||||||
force = force or self.all_geometry_changed
|
force = force or self.all_geometry_changed
|
||||||
|
@ -277,6 +285,13 @@ class LeaveDescription(SerializableMixin):
|
||||||
def title(self):
|
def title(self):
|
||||||
return self.target_space.title
|
return self.target_space.title
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def q_for_request(cls, request, prefix='', allow_none=False):
|
||||||
|
return (
|
||||||
|
Space.q_for_request(request, prefix='space__', allow_none=allow_none) &
|
||||||
|
Space.q_for_request(request, prefix='target_space__', allow_none=allow_none)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CrossDescription(SerializableMixin):
|
class CrossDescription(SerializableMixin):
|
||||||
"""
|
"""
|
||||||
|
@ -310,6 +325,14 @@ class CrossDescription(SerializableMixin):
|
||||||
def title(self):
|
def title(self):
|
||||||
return '%s → %s' % (self.origin_space.title, self.target_space.title)
|
return '%s → %s' % (self.origin_space.title, self.target_space.title)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def q_for_request(cls, request, prefix='', allow_none=False):
|
||||||
|
return (
|
||||||
|
Space.q_for_request(request, prefix='space__', allow_none=allow_none) &
|
||||||
|
Space.q_for_request(request, prefix='origin_space__', allow_none=allow_none) &
|
||||||
|
Space.q_for_request(request, prefix='target_space__', allow_none=allow_none)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class WifiMeasurement(SpaceGeometryMixin, models.Model):
|
class WifiMeasurement(SpaceGeometryMixin, models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue