From c593f63a822a20cf4b0f081591942a16be51aeed Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Fri, 11 Mar 2022 13:53:14 +0100
Subject: [PATCH] Add permission to check if event is published

---
 aleksis/apps/paweljong/predicates.py | 5 +++++
 aleksis/apps/paweljong/rules.py      | 8 ++++++--
 aleksis/apps/paweljong/views.py      | 6 ++++--
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/aleksis/apps/paweljong/predicates.py b/aleksis/apps/paweljong/predicates.py
index 2ce8686..1816f37 100644
--- a/aleksis/apps/paweljong/predicates.py
+++ b/aleksis/apps/paweljong/predicates.py
@@ -26,3 +26,8 @@ def is_own_registration(user: User, registration: EventRegistration) -> bool:
 def is_organiser(user: User, obj: EventRegistration) -> bool:
     """Predicate which checks if the user is an organiser."""
     return user.person in obj.event.linked_group.owners.all()
+
+@predicate
+def is_event_published(obj: EventRegistration) -> bool:
+    """Predicate which checks if the event is published."""
+    return obj.published
diff --git a/aleksis/apps/paweljong/rules.py b/aleksis/apps/paweljong/rules.py
index 7ad451f..f9f6931 100644
--- a/aleksis/apps/paweljong/rules.py
+++ b/aleksis/apps/paweljong/rules.py
@@ -14,6 +14,7 @@ from .predicates import (
     is_own_registration,
     is_own_voucher,
     is_organiser,
+    is_event_published,
 )
 
 ## Vouchers
@@ -59,6 +60,9 @@ change_event_predicate = has_person & (
 )
 rules.add_perm("paweljong.change_event_rule", change_event_predicate)
 
+# View event
+view_event_predicate = (is_event_published)
+rules.add_perm("paweljong.view_event_rule", view_event_predicate)
 
 # Delete event
 delete_event_predicate = has_person & (
@@ -114,7 +118,7 @@ rules.add_perm("paweljong.view_terms_rule", view_terms_predicate)
 
 # View term
 view_term_predicate = has_person & (
-    has_global_perm("paweljong.view_term") | has_object_perm("paweljong.view_term", Terms)
+    has_global_perm("paweljong.view_term") | has_object_perm("paweljong.view_term")
 )
 rules.add_perm("paweljong.view_term_rule", view_term_predicate)
 
@@ -149,7 +153,7 @@ rules.add_perm("paweljong.view_info_mailings_rule", view_info_mailings_predicate
 
 # View info_mailing
 view_info_mailing_predicate = has_person & (
-    has_global_perm("paweljong.view_info_mailing") | has_object_perm("paweljong.view_info_mailing", Terms)
+    has_global_perm("paweljong.view_info_mailing") | has_object_perm("paweljong.view_info_mailing")
 )
 rules.add_perm("paweljong.view_info_mailing_rule", view_info_mailing_predicate)
 
diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py
index 6179f3d..806b313 100644
--- a/aleksis/apps/paweljong/views.py
+++ b/aleksis/apps/paweljong/views.py
@@ -685,12 +685,13 @@ class RegisterEventWizardView(SessionWizardView):
         return redirect("index")
 
 
-class EventFullView(DetailView):
+class EventFullView(PermissionRequiredMixin, DetailView):
 
     model = Event
     slug_field = "slug"
     template_name = "paweljong/event/full.html"
     object_context_name = "event"
+    permission_required = "paweljong.view_event_rule"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
@@ -700,12 +701,13 @@ class EventFullView(DetailView):
         return context
 
 
-class RegisterEventStart(DetailView):
+class RegisterEventStart(PermissionRequiredMixin, DetailView):
 
     model = Event
     slug_field = "slug"
     template_name = "paweljong/event/register_start.html"
     object_context_name = "event"
+    permission_required = "paweljong.view_event_rule"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-- 
GitLab