Skip to content

TokenAbility: layer_and_below permission nicht für Event-Teilnehmende angewendet (Pbs::TokenAbility) #450

@giorgiopiatti

Description

@giorgiopiatti

Aktuelles Verhalten

Ein Service Token auf einem Kantonalverband mit der Berechtigung layer_and_below_read
oder layer_and_below_full und aktiviertem "Partecipanti ad eventi / Teilnehmende von Events"
erhält beim Abrufen der Teilnehmenden eines Anlass einer untergeordneten Abteilung eine
403 Forbidden-Antwort:

GET /groups/<abteilung_id>/events/<event_id>/participations.json
X-Token:
→ 403 Forbidden

Das gleiche Token kann jedoch die Anlässe (Lager) derselben Abteilung korrekt auflisten:

GET /groups/<kantonalverband_id>/events.json
→ 200 OK ✅

Ausserdem kann ein menschlicher Admin mit derselben Rolle auf dem Kantonalverband diese
Daten bereits lesen — sowohl über die UI als auch via OAuth Bearer Token
(DoorkeeperTokenAbility delegiert an die volle Ability.new(person)). Ein Service Token
mit explizit gesetzter layer_and_below-Berechtigung kann also weniger als der Mensch,
der es erstellt hat.

Gewünschtes Verhalten

Ein Service Token mit layer_and_below_read oder layer_and_below_full sollte die
Teilnehmenden von Anlässen in untergeordneten Ebenen lesen können — analog zum bereits
funktionierenden index_event/camps, das in Pbs::TokenAbility korrekt mit
token_layer_and_below.include?(g) implementiert ist.

Konkreter Anwendungsfall: Wir entwickeln eine Check-in-App für das Kantonallager 2026
von Scoutismo Ticino (Bestiale 2026), das aus mehreren Unterlagern besteht, die je einer
Abteilung zugeordnet sind. Die App dient dem Sicherheits- und Notfallmanagement: Sie
ermöglicht jederzeit einen genauen Überblick darüber, welche Teilnehmenden anwesend sind —
kritisch im Notfall, um schnell feststellen zu können, ob alle Personen in Sicherheit sind.

Das Service Token ist auf dem Kantonalverband eingerichtet, da nur dort die nötigen Rechte
für die Gesamtkoordination vorliegen. Die App benötigt die Teilnehmendenlisten aller
Unterlager, um den Check-in zu ermöglichen — was aktuell wegen der fehlenden
layer_and_below-Unterstützung bei Teilnehmenden nicht funktioniert.

Schritte zu reproduzieren

Service Token auf einem Kantonalverband erstellen mit:
Berechtigung: "Lese- und Schreibrecht für diese und darunterliegende Ebenen" (layer_and_below_read)
Checkbox "Teilnehmende von Events" aktiviert
Einen Anlasstyp "Lager" auf einer untergeordneten Abteilung erstellen
GET /groups/<abteilung_id>/events/<event_id>/participations.json mit X-Token aufrufen
→ 403 Forbidden
Ursache: Pbs::TokenAbility überschreibt define_event_abilities mit layer_and_below-Logik
für Lager (define_event_abilities_with_camps), aber define_event_participation_abilities
wird nicht überschrieben und fällt auf den Core-Default zurück: token.layer == event.layer_group
(harte Gleichheit, ohne layer_and_below).

Wann ist der Fehler aufgetreten?

No response

hitobito version

No response

Organisation

PBS

Screenshots, weiterer Kontext

No response

ToDos

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions