stammtisch-hersbruck/backend/pb_migrations/1757340000_users_superadmin_delete.js
Daniel Michelberger 279796111c wip: Der abgebrochene Kurbeler-Umbau, wie er hier liegengeblieben ist
Kein fertiger Stand, sondern ein Zwischenstand: Hier wurde im September 2026
angefangen, die App auf „Kurbeler" umzubenennen — Wortmarke, Icons, brand.ts,
Benachrichtigungen, das Benutzerverzeichnis. Weitergegangen ist es dann im
eigenen Repo `~/Dokumente/Projekte/kurbeler`, das die vollständige Historie
dieses Repos mitgenommen hat.

Committet wird das hier nicht, weil es gebraucht würde, sondern damit es nicht
als Haufen unversionierter Dateien im Arbeitsverzeichnis verrottet. Wer in
zwei Jahren nachsieht, findet so eine Geschichte statt eines Rätsels — und das
Stammtisch-Wappen, das nur hier je existiert hat.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LTw6xVYgjMy9AQtfs1Gdyu
2026-09-11 15:42:33 +02:00

38 lines
1.6 KiB
JavaScript

/// <reference path="../pb_data/types.d.ts" />
// Konten löschen darf der Superadmin.
//
// Bis hierher galt `users.deleteRule = "id = @request.auth.id"`: Ein Konto
// konnte allein sein Inhaber löschen. Das ist die richtige Voreinstellung —
// eine Teamleitung hat an fremden Konten nichts verloren, sie verwaltet
// Fahrer und Mitgliedschaften, nicht Menschen. Genau dabei bleibt es; im
// Kader gibt es seitdem nur noch „Zugang zum Team entziehen".
//
// Was fehlte, war die Stelle darüber: Ein Konto, das niemand mehr braucht und
// dessen Inhaber sich nicht selbst darum kümmert, blieb für immer stehen. Das
// erledigt jetzt der Superadmin im Benutzer-Verzeichnis unter Einstellungen.
//
// Der Vorspann `@request.auth.id != ""` ist Pflicht (siehe
// 1754501700_rules_require_login.js): Ohne ihn wäre `@request.auth.superadmin`
// einer anonymen Anfrage ein leerer Wert — und leer gegen leer verglichen ist
// in PocketBase wahr.
//
// Gelöscht wird nur das Konto. Fahrer, Teilnahmen und Zeiten hängen am Team
// und bleiben stehen; sie sind dessen Geschichte und nicht die des Logins.
// Ein Team, dessen Owner das Konto ist, blockiert die Löschung — `teams.owner`
// ist eine Pflichtrelation ohne cascadeDelete. Die Oberfläche prüft das vorher
// und sagt, welches Team im Weg steht.
const RULE = 'id = @request.auth.id || (@request.auth.id != "" && @request.auth.superadmin = true)'
migrate((app) => {
const users = app.findCollectionByNameOrId('users')
users.deleteRule = RULE
app.save(users)
}, (app) => {
const users = app.findCollectionByNameOrId('users')
users.deleteRule = 'id = @request.auth.id'
app.save(users)
})