More access control
This commit is contained in:
parent
9281c76ddc
commit
7c6dfa1073
1 changed files with 40 additions and 5 deletions
|
@ -1,11 +1,46 @@
|
|||
# TODO:
|
||||
class CreatorOnlyMixin:
|
||||
"""Restreint l'accès au créateurice de l'élection"""
|
||||
from django.utils import timezone
|
||||
from django.views.generic.detail import SingleObjectMixin
|
||||
|
||||
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):
|
||||
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
|
||||
user = self.request.user
|
||||
return super().get_queryset().filter(created_by=user)
|
||||
filters[self.get_f_prefix() + "created_by"] = self.request.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:
|
||||
|
|
Loading…
Reference in a new issue