Papierkorb statt endgültigem Löschen, und Zugriffsregeln für jede Bild-Route
Löschen in der Bibliothek entfernte Zeile und Ergebnisdatei sofort. Ein Fehlklick, und ein Ergebnis war weg — samt dem, was es gekostet hat. Jetzt landet es im Papierkorb: - weg aus Bibliothek, Freigabelinks, ZIPs, Auslieferung, NAS-Spiegel, Druckquellen und Druckverlauf; beim Wiederherstellen unverändert zurück - „Rückgängig" im Hinweis, Papierkorb-Ansicht mit Resttagen, Wiederherstellen, endgültig löschen, leeren - die Wartung räumt nach settings.trash_days (Standard 30, Admin -> Speicher) endgültig ab; 0 schaltet den Papierkorb aus - ein Bild, das noch in der Warteschlange wartet, wird nicht mehr erzeugt (und nicht bezahlt) - endgültig gelöscht wird nur, was kein anderes Bild mehr nutzt — Alternativen teilen ihre Quelle mit dem Original, auch Kombinieren- Quellen in source_paths (jsonb) Beim Durchgehen jeder Abfrage auf items fiel auf: Nur die Datei-Route prüfte, wer ein Bild sehen darf. Umbenennen, Löschen, Wiederholen, Alternative, Weiterbearbeiten und die Auswahl-ZIP nahmen jede Kennung von jedem Konto. Jetzt gilt eine Regel (src/lib/itemaccess.ts): sehen, was einem gehört oder in der geteilten Bibliothek liegt, ändern nur Eigenes; Admins alles. Für Till ändert sich nichts. Lea kann fremde Bilder in der geteilten Bibliothek weiter sehen, aber nicht mehr löschen. Dazu Favicon und Homebildschirm-Symbol, Hilfe und Changelog-Seite. Geprüft gegen echtes Postgres mit zwei Konten und echten Dateien: 35 Ende-zu-Ende-Prüfungen bestanden, Oberfläche im Browser (Löschen, Rückgängig, Papierkorb, Wiederherstellen, 390 px ohne Querlauf). 128 Tests, Typprüfung 0 Fehler.
This commit is contained in:
33 files changed
+456
-40
No files matched your search
@@ -2,6 +2,37 @@
|
||||
|
||||
All notable changes to Klarbild are documented here. Newest first.
|
||||
|
||||
## 2026-10-10 — Trash, access rules, current dependencies
|
||||
|
||||
### Added
|
||||
- **Trash instead of deleting for good.** Deleting moves an image into the trash
|
||||
(`items.deleted_at`, migration 017). It disappears from the library, share links, ZIPs,
|
||||
deliveries, the backup mirror, print sources and the print history, and returns
|
||||
unchanged on restore. A toast offers "Rückgängig"; the trash view lists days left,
|
||||
restore, delete for good, empty. Maintenance purges after `settings.trash_days`
|
||||
(default 30, Admin → Speicher); 0 switches the trash off. API: `DELETE /api/items/:id`
|
||||
(trash), `?purge=1`, `GET|POST|DELETE /api/trash`.
|
||||
- Purging deletes only files no other image still uses — alternatives share their source
|
||||
with the original, including combine sources in `source_paths` (jsonb).
|
||||
- An image trashed while queued is skipped by the worker instead of being generated.
|
||||
- Favicon and iPhone home-screen icon.
|
||||
|
||||
### Fixed
|
||||
- **Access checks on every image route.** Only the file route checked visibility before;
|
||||
rename, delete, retry, alternative, reuse and the selection ZIP accepted any id from any
|
||||
account. One rule in `src/lib/itemaccess.ts`: read own (or shared library, never a
|
||||
private session), change own; admins all.
|
||||
- Telegram print sheets had no footer: the footer was passed as a string instead of a
|
||||
`FooterSpec`, so `.text` was undefined.
|
||||
- `npm run typecheck` exists and reports 0 errors (17 before).
|
||||
|
||||
### Changed
|
||||
- Dependencies: nodemailer 10, basic-ftp 6, argon2 0.45, archiver 8 (`ZipArchive`),
|
||||
ssh2-sftp-client 12, @astrojs/react 7, Astro 7.3.8, sharp 0.35.5. `npm audit`: 0.
|
||||
pg-boss stays on 10 (12 cannot migrate the v10 schema in place).
|
||||
- basic-ftp 6 no longer redirects the data connection when an FTP server behind NAT
|
||||
announces its private address. Run "Verbindung testen" for each FTPS target.
|
||||
|
||||
## 2026-09-01 (later) — Unique names for print files
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in new issue
Block a user