fix(security): Posteingangs-Maske nur für Dokumente im eigenen Arbeitsbereich

PUT paperless/inbox/:id prüft jetzt pro Dokument: Posteingang-Rolle nur
für Dokumente mit Tag 1 (Posteingang), Buchhaltung nur für Dokumente mit
MANUELL_BEARBEITEN_TAG, Admins immer. Bisher ließen sich Mandant (Owner),
Felder und Titel beliebiger Paperless-Dokumente ändern, weil das Backend
mit dem Service-Token arbeitet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bjoernpoettkerandClaude Opus 5.5 committed 2026-11-04 10:46:43 +01:00
1 parent 3f98dfd98f
commit cedd7c78f4
4 files changed
+97 -4

No files matched your search

@@ -0,0 +1,25 @@
import { Permission } from '../auth/permissions.enum';
/** Paperless-Tag, der ein Dokument als „im Posteingang“ kennzeichnet. */
export const POSTEINGANG_TAG_ID = 1;
/**
* Darf der Benutzer dieses Paperless-Dokument über die Posteingangs-Maske
* bearbeiten? Der Backend-Service-Token umgeht die Paperless-Rechte, deshalb
* wird hier pro Dokument geprüft: Posteingang-Rolle nur für Dokumente mit
* Posteingang-Tag, Buchhaltung nur für Dokumente mit Manuell-Tag.
*/
export function darfDokumentBearbeiten(
tags: number[] | undefined,
permissions: Permission[],
manuellTagId: number,
): boolean {
if (permissions.includes(Permission.MANAGE_ALL)) return true;
const vorhanden = new Set((tags ?? []).map(Number));
return (
(vorhanden.has(POSTEINGANG_TAG_ID) &&
permissions.includes(Permission.VIEW_INBOX)) ||
(vorhanden.has(manuellTagId) &&
permissions.includes(Permission.PROCESS_MANUALLY))
);
}