-
Notifications
You must be signed in to change notification settings - Fork 31
Description
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