Files
paperlessmanager/paperless-backend/src/auth/permissions.enum.ts
T
bjoernpoettker 4d05a94681 feat: implement two-step Freigabe→Zahlung workflow
Adds a payment step after document approval: PM_Freigabe approves
(Field 15 = "freigegeben"), then PM_Zahlung can mark as paid (Field 16).

- Backend: VIEW_ZAHLUNG permission mapped to PM_Zahlung OIDC group
- Backend: ZahlungModule with endpoints to list documents by filter
  (ausstehend/freigegeben/alle), set Field 16, fetch options from Paperless
- Backend: setZahlung() throws ForbiddenException if Field 15 ≠ "freigegeben"
- Frontend: /zahlung route with 3-way filter, two status columns (Freigabe + Zahlung)
- Frontend: "Zahlung verbuchen" button disabled with tooltip for non-approved docs
- Frontend: Zahlung menu item with EuroOutlined icon

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 21:29:50 +02:00

45 lines
1.5 KiB
TypeScript

export const Permission = {
MANAGE_ALL: 'MANAGE_ALL',
PROCESS_MANUALLY: 'PROCESS_MANUALLY',
VIEW_MAIL: 'VIEW_MAIL',
VIEW_INBOX: 'VIEW_INBOX',
VIEW_SCANNER: 'VIEW_SCANNER',
MANAGE_SETTINGS: 'MANAGE_SETTINGS',
VIEW_FREIGABE: 'VIEW_FREIGABE',
VIEW_ZAHLUNG: 'VIEW_ZAHLUNG',
} as const;
export type Permission = (typeof Permission)[keyof typeof Permission];
export function mapGroupsToPermissions(
groups: string[] | undefined | null,
): Permission[] {
const permissions = new Set<Permission>();
if (!groups || !Array.isArray(groups)) {
return [];
}
if (groups.includes('PM_Admin')) {
permissions.add(Permission.MANAGE_ALL);
permissions.add(Permission.PROCESS_MANUALLY);
permissions.add(Permission.VIEW_MAIL);
permissions.add(Permission.VIEW_INBOX);
permissions.add(Permission.VIEW_SCANNER);
permissions.add(Permission.MANAGE_SETTINGS);
permissions.add(Permission.VIEW_FREIGABE);
permissions.add(Permission.VIEW_ZAHLUNG);
return Array.from(permissions);
}
if (groups.includes('PM_Belege'))
permissions.add(Permission.PROCESS_MANUALLY);
if (groups.includes('PM_Maileingang')) permissions.add(Permission.VIEW_MAIL);
if (groups.includes('PM_Posteingang')) permissions.add(Permission.VIEW_INBOX);
if (groups.includes('PM_Scanner')) permissions.add(Permission.VIEW_SCANNER);
if (groups.includes('PM_Freigabe')) permissions.add(Permission.VIEW_FREIGABE);
if (groups.includes('PM_Zahlung')) permissions.add(Permission.VIEW_ZAHLUNG);
return Array.from(permissions);
}