bornhack-website/src/backoffice/mixins.py

76 lines
2.4 KiB
Python
Raw Normal View History

2020-08-11 01:26:30 +00:00
from django.contrib.auth.mixins import UserPassesTestMixin
2020-08-11 00:22:36 +00:00
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from camps.mixins import CampViewMixin
2020-08-11 00:22:36 +00:00
from economy.models import Pos
from utils.mixins import RaisePermissionRequiredMixin
class OrgaTeamPermissionMixin(RaisePermissionRequiredMixin):
"""
Permission mixin for views used by Orga Team
"""
2019-06-16 12:32:24 +00:00
permission_required = ("camps.backoffice_permission", "camps.orgateam_permission")
class EconomyTeamPermissionMixin(RaisePermissionRequiredMixin):
"""
Permission mixin for views used by Economy Team
"""
2019-06-16 12:32:24 +00:00
permission_required = (
"camps.backoffice_permission",
"camps.economyteam_permission",
)
class InfoTeamPermissionMixin(RaisePermissionRequiredMixin):
"""
Permission mixin for views used by Info Team/InfoDesk
"""
2019-06-16 12:32:24 +00:00
permission_required = ("camps.backoffice_permission", "camps.infoteam_permission")
class ContentTeamPermissionMixin(RaisePermissionRequiredMixin):
"""
Permission mixin for views used by Content Team
"""
2019-06-16 12:32:24 +00:00
permission_required = (
"camps.backoffice_permission",
"camps.contentteam_permission",
2019-06-16 12:32:24 +00:00
)
2020-08-11 00:22:36 +00:00
2020-08-11 01:26:30 +00:00
class PosViewMixin(CampViewMixin, UserPassesTestMixin):
2020-08-11 00:22:36 +00:00
"""A mixin to set self.pos based on pos_slug in url kwargs."""
def setup(self, *args, **kwargs):
super().setup(*args, **kwargs)
self.pos = get_object_or_404(
Pos, team__camp=self.camp, slug=self.kwargs["pos_slug"]
)
2020-08-11 01:26:30 +00:00
def test_func(self):
2020-08-11 00:22:36 +00:00
"""
This view requires two permissions, camps.backoffice_permission and the permission_set for the team in question.
"""
if not self.pos.team.permission_set:
raise PermissionDenied("No permissions set defined for this team")
2020-08-11 01:26:30 +00:00
if not self.request.user.has_perm("camps.backoffice_permission"):
raise PermissionDenied("User has no backoffice permission")
if not self.request.user.has_perm(
"camps.orgateam_permission"
) and not self.request.user.has_perm("camps." + self.pos.team.permission_set):
raise PermissionDenied("User has no permission for this Pos")
return True
2020-08-11 00:22:36 +00:00
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context["pos"] = self.pos
return context