diff --git a/aleksis/apps/paweljong/menus.py b/aleksis/apps/paweljong/menus.py index 149cd54a637869ca14489f308f5caaf87ec7c370..bc3e904e3dea19ae8f627260258f3eedfc58728b 100644 --- a/aleksis/apps/paweljong/menus.py +++ b/aleksis/apps/paweljong/menus.py @@ -18,7 +18,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "paweljong.change_events_rule", + "paweljong.view_menu", ) ], "submenu": [ diff --git a/aleksis/apps/paweljong/predicates.py b/aleksis/apps/paweljong/predicates.py index 7288954a4858f7508debda30ea30e331a44fa86a..fcb2f88da6d9bd21b0e08a839d33a5d6107bd89b 100644 --- a/aleksis/apps/paweljong/predicates.py +++ b/aleksis/apps/paweljong/predicates.py @@ -36,3 +36,9 @@ def is_own_voucher(user: User, voucher: Voucher) -> bool: def is_own_registration(user: User, registration: EventRegistration) -> bool: """Predicate which checks if the registration belongs to the user.""" return registration.person == user.person + + +@predicate +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() diff --git a/aleksis/apps/paweljong/rules.py b/aleksis/apps/paweljong/rules.py index 056af3de4f17ea5c2fed2fce93b168a7c5fd8f74..cc3d72cd64822a310e73b9a8f8bbc5bb429b4af7 100644 --- a/aleksis/apps/paweljong/rules.py +++ b/aleksis/apps/paweljong/rules.py @@ -9,10 +9,11 @@ from aleksis.core.util.predicates import ( is_group_member, ) -from .models import Event, EventRegistration, Terms, Voucher +from .models import Event, EventRegistration, Terms, Voucher, RegistrationState, InfoMailing from .predicates import ( is_own_registration, is_own_voucher, + is_organiser, see_group_by_grouptype, see_owned_groups_members, ) @@ -75,22 +76,21 @@ may_see_person_predicate = has_person & ( ) rules.add_perm("paweljong.see_person_rule", may_see_person_predicate) -# View registrations -view_registrations_predicate = has_person & ( - has_global_perm("paweljong.view_eventregistration") - | has_any_object("paweljong.view_eventregistration", EventRegistration) -) -rules.add_perm("paweljong.view_registrations_rule", view_registrations_predicate) - - # Manage registrations manage_registrations_predicate = has_person & ( has_global_perm("paweljong.manage_registration") + | is_organiser | is_own_registration - | has_any_object("paweljong.manage_registration", EventRegistration) ) rules.add_perm("paweljong.manage_registrations_rule", manage_registrations_predicate) +# View registrations +view_registrations_predicate = has_person & ( + has_global_perm("paweljong.view_eventregistration") + | has_any_object("paweljong.manage_registrations_rule", EventRegistration) +) +rules.add_perm("paweljong.view_registrations_rule", view_registrations_predicate) + # Delete registrations delete_registrations_predicate = has_person & ( has_global_perm("paweljong.delete_eventregistration") @@ -117,3 +117,13 @@ view_info_mailings_predicate = has_person & ( | has_any_object("paweljong.view_info_mailing", Terms) ) rules.add_perm("paweljong.view_info_mailings_rule", view_info_mailings_predicate) + +can_view_menu_predicate = has_person & ( + has_any_object("paweljong.manage_registrations_rule", EventRegistration) + | has_any_object("paweljong.view_info_mailing", InfoMailing) + | has_any_object("paweljong.view_terms", Terms) + | has_any_object("paweljong.view_voucher", Voucher) + | has_any_object("paweljong.view_event", Event) + | has_any_object("paweljong.view_registrationstate", RegistrationState) +) +rules.add_perm("paweljong.view_menu", can_view_menu_predicate) diff --git a/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html b/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html index 351c67ddc63e2a643adbbe289580083badfc2707..14ee4617b13c3d1a1b08d0305ef80b4660dc678d 100644 --- a/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html +++ b/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html @@ -43,8 +43,7 @@ <h5>{% blocktrans %}Contact details{% endblocktrans %}</h5> <div class="row"> <div class="col s12 m4"> - {% has_perm 'core.view_photo' user registration.person as can_view_photo %} - {% if registration.person.photo and can_view_photo %} + {% if registration.person.photo %} <img class="person-img" src="{{ registration.person.photo.url }}" alt="{{ registration.person.first_name }} {{ registration.person.last_name }}"/> {% else %} @@ -56,7 +55,6 @@ <table class="responsive-table highlight"> <tr> <td rowspan="6"> - </td> <td> <i class="material-icons small">person</i> @@ -81,31 +79,25 @@ <td colspan="2">{{ registration.person.postal_code }} {{ registration.person.place }}</td> </tr> {% endif %} - {% has_perm 'core.view_contact_details' user registration.person as can_view_contact_details %} - {% if can_view_contact_details %} - <tr> - <td> - <i class="material-icons small">phone</i> - </td> - <td>{{ registration.person.phone_number }}</td> - <td>{{ registration.person.mobile_number }}</td> - </tr> - <tr> - <td> - <i class="material-icons small">email</i> - </td> - <td colspan="3">{{ registration.person.email }}</td> - </tr> - {% endif %} - {% has_perm 'core.view_personal_details' user registration.person as can_view_personal_details %} - {% if can_view_personal_details %} - <tr> - <td> - <i class="material-icons small">cake</i> - </td> - <td colspan="3">{{ registration.person.date_of_birth|date }}</td> - </tr> - {% endif %} + <tr> + <td> + <i class="material-icons small">phone</i> + </td> + <td>{{ registration.person.phone_number }}</td> + <td>{{ registration.person.mobile_number }}</td> + </tr> + <tr> + <td> + <i class="material-icons small">email</i> + </td> + <td colspan="3">{{ registration.person.email }}</td> + </tr> + <tr> + <td> + <i class="material-icons small">cake</i> + </td> + <td colspan="3">{{ registration.person.date_of_birth|date }}</td> + </tr> <tr> <td></td> <td> @@ -165,7 +157,6 @@ </tr> {% endfor %} {% endif %} - <tr> <tr> <td> @@ -190,7 +181,7 @@ </div> </div> - {% if registration.person.guardians.all and can_view_personal_details %} + {% if registration.person.guardians.all %} <h5>{% trans "Guardians / Parents "%}</h5> {% for person in registration.person.guardians.all %} <div class="col s12 m8"> @@ -222,22 +213,19 @@ <td colspan="2">{{ person.postal_code }} {{ person.place }}</td> </tr> {% endif %} - {% has_perm 'core.view_contact_details' user person as can_view_contact_details %} - {% if can_view_contact_details %} - <tr> - <td> - <i class="material-icons small">phone</i> - </td> - <td>{{ person.phone_number }}</td> - <td>{{ person.mobile_number }}</td> - </tr> - <tr> - <td> - <i class="material-icons small">email</i> - </td> - <td colspan="3">{{ person.email }}</td> - </tr> - {% endif %} + <tr> + <td> + <i class="material-icons small">phone</i> + </td> + <td>{{ person.phone_number }}</td> + <td>{{ person.mobile_number }}</td> + </tr> + <tr> + <td> + <i class="material-icons small">email</i> + </td> + <td colspan="3">{{ person.email }}</td> + </tr> {% has_perm 'core.view_personal_details' user person as can_view_personal_details %} {% if can_view_personal_details %} <tr> diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py index a5251d9d11d11d929bcce83a385400f31c40513e..2a3dba289b839fab805abba85aee826bdf47d605 100644 --- a/aleksis/apps/paweljong/views.py +++ b/aleksis/apps/paweljong/views.py @@ -26,6 +26,7 @@ from aleksis.apps.postbuero.models import MailAddress from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView from aleksis.core.models import Activity, Person from aleksis.core.util import messages +from aleksis.core.util.predicates import queryset_rules_filter from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional from .filters import EventFilter, EventRegistrationFilter, VoucherFilter @@ -134,13 +135,13 @@ def generate_lists(request: HttpRequest) -> HttpResponse: return render(request, "paweljong/print/manage.html", context) -@permission_required("paweljong.view_registrations") +@permission_required("paweljong.view_registrations_rule") def registrations(request: HttpRequest) -> HttpResponse: """List view listing all registrations.""" context = {} # Get all registrations - registrations = EventRegistration.objects.all() + registrations = queryset_rules_filter(request.user, EventRegistration.objects.all(), "paweljong.manage_registrations_rule") # Get filter registrations_filter = EventRegistrationFilter(request.GET, queryset=registrations) @@ -219,7 +220,7 @@ class EventRegistrationDetailView(PermissionRequiredMixin, DetailView): """Detail view for an application instance.""" context_object_name = "registration" - permission_required = "paweljong.view_registration" + permission_required = "paweljong.manage_registrations_rule" template_name = "paweljong/event_registration/full.html" def get_queryset(self):