Skip to content

Schul-Scoping fehlt bei allen Gruppen-Schreib-Endpunkten (/v1/groups) #22

Description

@anschuetz

In routers_v1/groups.py binden die Schreib-Endpunkte für Gruppen die zu bearbeitende Schule nicht an die Schule des angemeldeten Nutzers (who.school), sondern übernehmen sie ungeprüft aus Query-Parameter oder Body:

  • delete_group (L94, L110): active_school = school if school else who.school
  • create_group (L116, L156): school = group_details.school or who.school
  • modify_group (L204, L228): dieselbe Zeile
  • add_members_to_group (L268, L290): active_school = school if school else who.school
  • remove_members_from_group (L306, L328): dieselbe Zeile
  • migrate_group (L344, L365): dieselbe Zeile

RoleChecker("GS") prüft nur die Rolle (global-administrator/school-administrator), nicht ob die angefragte school mit who.school übereinstimmt. get_group_or_404(group, active_school) und LMNGroup(group, school=active_school) erhalten who nicht und führen keine Nutzer-Bindung durch.

Ein school-administrator kann dadurch z. B. per DELETE /v1/groups/{group}?school=<andere_schule> oder POST /v1/groups/{group} mit "school": "<andere_schule>" im Body Gruppen einer fremden Schule anlegen, ändern, löschen oder deren Mitglieder verwalten.

Fix: school in diesen Endpunkten fest auf who.school binden für school-administrators (analog zum Muster in passwordconstraints.py, wo school für school-administrators explizit gegen who.school geprüft wird), und nur global-administrators die freie Schulwahl erlauben.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions