diff --git a/aleksis/apps/paweljong/predicates.py b/aleksis/apps/paweljong/predicates.py index 1816f377c6605fc719dec4d98408e1120445bbc9..5585bf057453edbe1b0ef69202cb93d2d0d737a8 100644 --- a/aleksis/apps/paweljong/predicates.py +++ b/aleksis/apps/paweljong/predicates.py @@ -1,3 +1,5 @@ +from typing import Union + from django.contrib.auth import get_user_model from rules import predicate @@ -5,7 +7,7 @@ from rules import predicate from aleksis.core.models import Group, Person from aleksis.core.util.predicates import check_object_permission -from .models import EventRegistration, Voucher +from .models import Event, EventRegistration, Voucher User = get_user_model() @@ -23,11 +25,18 @@ def is_own_registration(user: User, registration: EventRegistration) -> bool: @predicate -def is_organiser(user: User, obj: EventRegistration) -> bool: +def is_organiser(user: User, obj: Union[Event, EventRegistration]) -> bool: """Predicate which checks if the user is an organiser.""" - return user.person in obj.event.linked_group.owners.all() + if isinstance(obj, EventRegistration): + event = obj.event + elif isinstance(obj, Event): + event = obj + else: + raise TypeError("This predicate can only check Event and EventRegistration.") + + return user.person in event.linked_group.owners.all() @predicate -def is_event_published(obj: EventRegistration) -> bool: +def is_event_published(user: User, 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 f6e1a80f459749abd236bcbd4db5f19c121ac218..feef9ea7127019d42f548affb9583c40fbfd3734 100644 --- a/aleksis/apps/paweljong/rules.py +++ b/aleksis/apps/paweljong/rules.py @@ -225,6 +225,6 @@ can_view_menu_predicate = has_person & ( | view_terms_predicate | view_vouchers_predicate | view_events_predicate - | view_events_registration_states_predicate + | view_registration_states_predicate ) rules.add_perm("paweljong.view_menu", can_view_menu_predicate)