2017-07-13 18:43:03 +02:00
|
|
|
from django.db import models
|
2017-07-13 19:22:57 +02:00
|
|
|
from django.db.models import Q
|
2017-07-13 18:43:03 +02:00
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
|
|
|
|
from c3nav.mapdata.models.base import SerializableMixin, TitledMixin
|
|
|
|
|
|
|
|
|
|
|
|
class AccessRestriction(TitledMixin, models.Model):
|
|
|
|
"""
|
|
|
|
An access restriction, currently without finetuning
|
|
|
|
"""
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
verbose_name = _('Access Restriction')
|
|
|
|
verbose_name_plural = _('Access Restrictions')
|
|
|
|
default_related_name = 'accessrestrictions'
|
|
|
|
|
2017-07-13 18:54:49 +02:00
|
|
|
@classmethod
|
|
|
|
def qs_for_request(cls, request):
|
|
|
|
if request.user.is_authenticated and request.user.is_superuser:
|
|
|
|
return cls.objects.all()
|
|
|
|
return cls.objects.none()
|
|
|
|
|
2017-07-13 18:43:03 +02:00
|
|
|
|
|
|
|
class AccessRestrictionMixin(SerializableMixin, models.Model):
|
|
|
|
access_restriction = models.ForeignKey(AccessRestriction, null=True, blank=True,
|
|
|
|
verbose_name=_('Access Restriction'))
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
abstract = True
|
|
|
|
|
|
|
|
def _serialize(self, **kwargs):
|
|
|
|
result = super()._serialize(**kwargs)
|
|
|
|
result['access_restriction'] = self.access_restriction_id
|
|
|
|
return result
|
2017-07-13 18:54:49 +02:00
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def qs_for_request(cls, request):
|
2017-07-13 22:22:13 +02:00
|
|
|
return cls.objects.filter(cls.q_for_request(request))
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def q_for_request(cls, request, prefix=''):
|
|
|
|
if request.user.is_authenticated and request.user.is_superuser:
|
|
|
|
return Q()
|
|
|
|
return Q(**{prefix + 'access_restriction__isnull': True})
|