Frappe-App: trennt Teilnehmer verschiedener Kundenfirmen im Frappe LMS (AGPL-3.0)
Find a file
David Göger 3b8ce9604e goeger_lms 0.2.0: Zertifikate nur eigene für Nicht-Staff; Probe prüft Doctype-Endpunkte und Kontrollen
Review vom 10.10.2026: Die Probe deckte /api/resource, /api/v2/document, get_list, reportview und
search_link nicht ab und bewies für Zertifikatsliste und Diskussionen nichts (keine Daten). Erweitert;
dabei gefunden: veröffentlichte LMS Certificates sind für alle Lernenden lesbar (LMS-Regel).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGdaffoUgL47hV3w9hGx2T
2026-10-10 15:13:14 +02:00
goeger_lms goeger_lms 0.2.0: Zertifikate nur eigene für Nicht-Staff; Probe prüft Doctype-Endpunkte und Kontrollen 2026-10-10 15:13:14 +02:00
tests goeger_lms 0.2.0: Zertifikate nur eigene für Nicht-Staff; Probe prüft Doctype-Endpunkte und Kontrollen 2026-10-10 15:13:14 +02:00
tools goeger_lms 0.2.0: Zertifikate nur eigene für Nicht-Staff; Probe prüft Doctype-Endpunkte und Kontrollen 2026-10-10 15:13:14 +02:00
.gitignore goeger_lms 0.1.0: Teilnehmer verschiedener Firmen im LMS trennen 2026-10-10 14:09:49 +02:00
LICENSE goeger_lms 0.1.0: Teilnehmer verschiedener Firmen im LMS trennen 2026-10-10 14:09:49 +02:00
pyproject.toml goeger_lms 0.1.0: Teilnehmer verschiedener Firmen im LMS trennen 2026-10-10 14:09:49 +02:00
README.md goeger_lms 0.1.0: Teilnehmer verschiedener Firmen im LMS trennen 2026-10-10 14:09:49 +02:00

goeger_lms

Kleine Frappe-App für das LMS von Göger-IT (schulung.goeger-it.de). Sie trennt Teilnehmer verschiedener Kundenfirmen, die sich eine LMS-Site teilen: Kein Lernender und kein Gast erfährt Namen, E-Mail-Adressen, Abzeichen oder Bewertungen von Teilnehmern anderer Firmen.

Der LMS-Code selbst bleibt unverändert. Die App leitet undichte LMS-Methoden per override_whitelisted_methods auf eigene Fassungen um (goeger_lms/guard.py) und beantwortet Profilseiten für Nicht-Staff mit 404 (goeger_lms/renderers.py). Staff (System Manager, Moderator, Course Creator, Batch Evaluator) bekommt immer das Original.

LMS-Methode für Lernende und Gäste
lms.lms.api.get_profile_details nur das eigene Profil
lms.lms.api.get_certified_participants leere Liste
lms.lms.api.get_badges nur eigene Abzeichen
lms.lms.utils.get_reviews Bewertungen ohne Verfasser
lms.lms.utils.get_discussion_topics / get_discussion_replies nur Beiträge von Staff
Seiten /lms/user/…, /lms/certified-participants 404

Warum nicht einfach im Reverse-Proxy sperren?

Frappe 16 bietet jede Methode unter /api/method, /api/v1/method und /api/v2/method an und nimmt zusätzlich das alte Formularfeld cmd auf jedem Pfad an. Eine Pfadsperre lässt sich damit umgehen; die Umleitung im Hook gilt dagegen auf jedem Weg.

Nach jedem LMS-Update

python3 -I tools/sichtbarkeit_probe.py   # Exit 0 = dicht

Die Probe legt zwei Test-Lernende mit Daten an, fragt als der eine alles über den anderen ab (alle Wege, auch als Gast) und räumt danach auf. Sie braucht einen API-Schlüssel mit Systemverwalter-Rechten in ~/.config/goeger/secrets.env (FRAPPE_API_KEY, FRAPPE_API_SECRET).

Tests

python3 -m unittest discover -s tests -v

Die Unit-Tests laufen ohne Frappe gegen Schein-Module und prüfen die Entscheidungslogik. Ob Frappe die Umleitungen wirklich nutzt, zeigt nur die Live-Probe.

Lizenz

AGPL-3.0, wie Frappe LMS.