More access control

This commit is contained in:
Tom Hubrecht 2020-12-20 01:58:38 +01:00
parent 9281c76ddc
commit 7c6dfa1073

View file

@ -1,11 +1,46 @@
# TODO: from django.utils import timezone
class CreatorOnlyMixin: from django.views.generic.detail import SingleObjectMixin
"""Restreint l'accès au créateurice de l'élection"""
from .models import Election, Option, Question
class RestrictAccessMixin:
"""Permet de restreindre l'accès à des élections/questions/options"""
f_prefixes = {Election: "", Question: "election__", Option: "question__election__"}
def get_f_prefix(self):
return self.f_prefixes.get(self.model, None)
def get_filters(self):
return {}
def get_queryset(self): def get_queryset(self):
qs = super().get_queryset()
if self.model in self.f_prefixes:
return qs.filter(**self.get_filters())
# On ne sait pas ce qu'on manipule donc on ne renvoie rien
return qs.none()
class CreatorOnlyMixin(RestrictAccessMixin):
"""Restreint l'accès au créateurice de l'élection"""
def get_filters(self):
filters = super().get_filters()
# TODO: change the way we collect the user according to the model used # TODO: change the way we collect the user according to the model used
user = self.request.user filters[self.get_f_prefix() + "created_by"] = self.request.user
return super().get_queryset().filter(created_by=user) return filters
class CreatorOnlyEditMixin(CreatorOnlyMixin, SingleObjectMixin):
"""Permet au créateurice de modifier l'élection implicitement"""
def get_filters(self):
# On ne peut modifier que les élections qui n'ont pas commencé
filters = super().get_filters()
filters[self.get_f_prefix() + "start_date__gt"] = timezone.now()
return filters
class AdministratorOnlyMixin: class AdministratorOnlyMixin: