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
38 lines
1.6 KiB
JavaScript
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)
|
|
})
|