- PermissionsGuard lehnt Routen ohne @RequirePermissions/@AllowAnyAuthenticated
ab. API-Keys umgehen keine Rechteprüfung mehr, sondern gelten nur auf
Routen mit @AllowApiKey (Paperless-Webhook, externer Upload, checksum,
Agent-Routen des Etikettendrucks).
- Rechte für 24 bisher offene Routen ergänzt, u.a. paperless/documents
(nur Admin), paperless/documents/:id und Kontonummern (Posteingang/
manuell), webhook/status (Admin). routen-rechte.spec.ts prüft alle Routen.
- Etiketten-Agent: printed/error nur für abgeholte, offene Jobs (bedingtes
Update, sonst 409) – ein gedruckter Job kann seine Nummer nicht mehr
freigeben. Feldwerte nur aus den Eingabefeldern der Vorlage ({number}
nicht vorgebbar) und URL-kodiert in GET-/Callback-URLs.
- PUT paperless/inbox/:id ignoriert Freigabe (CF15) und Zahlung (CF16)
ohne die jeweilige Rolle (Funktionstrennung).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { Permission } from '../auth/permissions.enum';
|
|
import {
|
|
FREIGABE_FIELD_ID,
|
|
ZAHLUNG_FIELD_ID,
|
|
entferneGeschuetzteStatusfelder,
|
|
} from './status-felder.util';
|
|
|
|
describe('entferneGeschuetzteStatusfelder', () => {
|
|
const felder = {
|
|
[FREIGABE_FIELD_ID]: 'freigegeben',
|
|
[ZAHLUNG_FIELD_ID]: 'bezahlt',
|
|
3: 'Rechnungsnummer',
|
|
};
|
|
|
|
it('entfernt Freigabe und Zahlung für die Posteingangs-Rolle', () => {
|
|
expect(
|
|
entferneGeschuetzteStatusfelder(felder, [Permission.VIEW_INBOX]),
|
|
).toEqual({ felder: { 3: 'Rechnungsnummer' }, entfernt: [15, 16] });
|
|
});
|
|
|
|
it('lässt jeder Rolle nur ihr eigenes Statusfeld', () => {
|
|
expect(
|
|
entferneGeschuetzteStatusfelder(felder, [
|
|
Permission.VIEW_INBOX,
|
|
Permission.VIEW_FREIGABE,
|
|
]).felder,
|
|
).toEqual({ 15: 'freigegeben', 3: 'Rechnungsnummer' });
|
|
expect(
|
|
entferneGeschuetzteStatusfelder(felder, [Permission.VIEW_ZAHLUNG]).felder,
|
|
).toEqual({ 16: 'bezahlt', 3: 'Rechnungsnummer' });
|
|
});
|
|
|
|
it('lässt Admins alles', () => {
|
|
expect(
|
|
entferneGeschuetzteStatusfelder(felder, [Permission.MANAGE_ALL]),
|
|
).toEqual({ felder, entfernt: [] });
|
|
});
|
|
|
|
it('kommt mit fehlenden Feldern klar', () => {
|
|
expect(entferneGeschuetzteStatusfelder(undefined, [])).toEqual({
|
|
felder: undefined,
|
|
entfernt: [],
|
|
});
|
|
});
|
|
});
|