team-3/src/c3nav/mapdata/models/access.py

46 lines
1.4 KiB
Python
Raw Normal View History

from django.db import models
from django.db.models import Q
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'
@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()
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
@classmethod
def qs_for_request(cls, request):
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})