95 lines
6.4 KiB
Markdown
95 lines
6.4 KiB
Markdown
# Agent-Hinweise zur Gruppenbearbeitung
|
|
|
|
Implementierter erster Stand: gemeinsame serverseitige Kopien von eigenen und
|
|
veröffentlichten Strecken, fünf Unicode-Wichtel im Einladungscode, Drehrad-Eingabe,
|
|
Sitzungen, Rollen owner/member, Codewechsel und Widerruf. Bedienung und Einspielen:
|
|
[Gruppenbearbeitung.md](../Gruppenbearbeitung.md).
|
|
|
|
## Beizubehalten
|
|
|
|
- Originale bleiben unverändert; keine Schreibrechte auf freigegebene Strecken
|
|
öffnen. Neue gemeinsame Kopien brauchen erneut die normale Moderationsfreigabe.
|
|
- creator_id bleibt Ersteller-Metadatum. Eigentums-/Mitgliedsrechte werden durch
|
|
zufällige Sitzungsgeheimnisse geprüft. Niemals Rechte anhand einer frei
|
|
übermittelten creator_id oder eines von einem Client behaupteten Rollenfelds vergeben.
|
|
- Sitzungsgeheimnisse nur als Hash serverseitig und als HttpOnly-/SameSite-Strict-
|
|
Cookie auf dem Client speichern; bei HTTPS zusätzlich Secure. Nicht ausgeben.
|
|
- Einladungscodes haben fünf Stellen mit den vorhandenen neun Symbolen.
|
|
Wiederholungen sind erlaubt; jede Stelle wird unabhängig mit randomInt
|
|
gewählt. Codes werden dauerhaft nur gehasht gespeichert; der aktuelle Klartext wird für
|
|
die Besitzeranzeige im Arbeitsspeicher des App-Prozesses gehalten. Gültigkeit 30 Minuten; falsche Versuche
|
|
sind begrenzt. Variationselektoren ändern die Unicode-Zuordnung nicht.
|
|
- Schutz auch auf den ursprünglichen /api/routes/...-Adressen für alle Gruppen-
|
|
Dateien durchsetzen. Anders geschriebene IDs (führende Nullen, Prozentkodierung,
|
|
Exponentialschreibweise, Groß-/Kleinschreibung der Pfade) dürfen ihn nicht umgehen.
|
|
- Gemeinsame Entwürfe aus öffentlichen Listen ausschließen. Änderungen verwenden
|
|
die geladene Gruppenrevision als If-Match. Hintergrundlisten dürfen diese
|
|
Bearbeitungsrevision nicht auf einen neueren Stand setzen. Konflikte zeigen,
|
|
ohne ungespeicherte Eingaben zu ersetzen. Schreibanfragen bis zum Abschluss sperren.
|
|
- Codewechsel entfernt nur die alte Einladung, Gruppenschließung entzieht auch
|
|
bestehenden Mitbearbeitern Rechte. Besitzer behalten Zugriff. Gemeinsame
|
|
Strecken nicht über die normalen Delete-/Restore-Endpunkte entfernen/wiederherstellen.
|
|
- Gruppenzugang benötigt Internet. Lokale Entwürfe weiter sofort anzeigen und
|
|
ihre Dateien erst bei Bedarf bzw. beim Übertragen laden.
|
|
- Rechtliche Hinweise zu Sitzungs-Cookies und serverseitigen Gruppenentwürfen
|
|
statisch auf Deutsch halten; Bedienung vollständig in Deutsch und Englisch.
|
|
|
|
## Weitere Aufgaben
|
|
|
|
- Wiederherstellung des eröffnenden Zugangs nach Cookie-/Geräteverlust und eine
|
|
ausdrücklich autorisierte Eigentumsübertragung entwickeln.
|
|
- Einzelne Mitglieder verwalten und gezielt entfernen; beigetretene Sitzungen
|
|
sind derzeit nur gemeinsam über „Gruppe schließen“ widerrufbar.
|
|
- Automatisches Zusammenführen bzw. feinere Konflikte und transaktionale
|
|
Mehrdatei-Übertragungen evaluieren. Bereits erfolgreiche Teiländerungen können
|
|
bei einem späteren Fehler bestehen bleiben. Neue Routen-POSTs sind noch nicht
|
|
gegen verlorene Erfolgsantworten idempotent.
|
|
- Expliziten unabhängigen Moderationszugang für private Gruppenmedien und einen
|
|
Ablauf zum Anfordern ihrer Veröffentlichung ergänzen; keinen Rechte-Bypass
|
|
anhand frei setzbarer Header oder beliebiger Basic-Auth-Header einführen.
|
|
- Aufbewahrung und Bereinigung verwaister Gruppen, Sitzungen und Kopien sowie
|
|
weitergehende Quoten und verteilte Sperren für einen Mehrprozessbetrieb planen.
|
|
- Der Gruppen-Code ist eine Einladung, kein persönlicher Identitätsnachweis.
|
|
Rechteprüfung für einzelne Inhalte bleibt eine getrennte offene Aufgabe.
|
|
|
|
## Stationssperren und zurückgehaltene Änderungen
|
|
|
|
- `src/services/point-locks.js` verwaltet atomare JSON-Sperrdateien pro Station
|
|
mit creator_id, Sitzungshash und zufälligem Bearbeitungsschlüssel. Rechte nicht
|
|
allein anhand der creator_id prüfen. Übernahmen brauchen eine bestätigte,
|
|
vergleichende Ersetzung des gerade angezeigten Schlüssels; während laufender
|
|
Speicherung weder freigeben noch übernehmen oder die Gruppe schließen.
|
|
- Alle Stations-Schreibpfade einschließlich Bilder/Ton, Entfernung und Umordnung
|
|
durch `guardPoint` schützen, auch bei alternativen URL-Schreibweisen.
|
|
- `X-Poi-Lock` und `If-Poi-Match` sind Pflicht. Der Inhaltsabdruck berücksichtigt
|
|
auch tatsächliche Dateibytes. Antwortheader `X-Poi-Version`/`X-Poi-Id` nach
|
|
erfolgreichen Teiländerungen aktualisieren. Stations-Schreibzugriffe verwenden
|
|
diese Prüfung anstelle des streckenweiten If-Match, damit verschiedene
|
|
Stationen unabhängig bearbeitbar sind. Das Einprozessmodell bleibt erforderlich.
|
|
- `public/js/group-points.js` sichert Entwürfe inklusive File/Blob und
|
|
Entfernungsvormerkungen vor dem Senden in IndexedDB. Transaktionsabschluss
|
|
abwarten; bei Quotenfehlern niemals erfolgreiche Sicherung behaupten.
|
|
- Entwürfe auch ohne Netz bzw. nach verlorenem Zugang anzeigen. Erst nach
|
|
erneutem Sperrerwerb und Inhaltsvergleich senden. Bei Abweichungen Vergleich
|
|
mit ausdrücklicher Bestätigung; keine automatische Wiederholung/Überschreibung.
|
|
- Datei-Entfernungen bei Gruppen zunächst vormerken. Bereits quittierte
|
|
Übertragungen aus der Warteliste nehmen. Die ursprüngliche Vergleichsbasis
|
|
behalten, bis sämtliche Änderungen erfolgreich übertragen wurden.
|
|
- Weiter offen: atomare Mehrdatei-Übertragungen/Idempotenz bei verlorenen
|
|
Erfolgsantworten, gezieltes Zusammenführen einzelner Felder und Auflösung
|
|
entfernter Stationen sowie verteilte Sperren. Eine nachfolgende Aufnahme
|
|
kann nicht ohne Einschränkungen zurückgerufen werden.
|
|
|
|
- Einladungscodes nach 30 Minuten automatisch erneuern, solange keine aktive
|
|
Stationssperre vorliegt. Abgelaufene Codes erlauben keinen neuen Beitritt, auch
|
|
wenn ihre Erneuerung wegen aktiver Stationen aufgeschoben ist. Mitgliedschaften
|
|
bleiben erhalten. Wartung im Serverprozess starten und beim Beenden stoppen.
|
|
- Sperren nach 60 Minuten ohne Aktivität entfernen; updated_at bei tatsächlicher
|
|
Bearbeitung/Speicherung aktualisieren. Reine Statusabfragen und unbenutzte
|
|
Fenster dürfen die Frist nicht verlängern. Laufende Schreibanfragen nicht
|
|
wegen Zeitablauf entsperren. Zeitprüfung auch vor dem endgültigen Speichern.
|
|
- GET auf den Stations-Sperrpfad liefert 204 für frei, 423 für gesperrt, 404 für
|
|
nicht vorhanden; bestehende Gruppenrechte gelten unverändert. Heartbeats sind
|
|
POSTs mit eigenem Bearbeitungsschlüssel und dürfen weder fremde noch bereits
|
|
abgelaufene Sperren übernehmen.
|