4d05a94681
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>
45 lines
1.5 KiB
TypeScript
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);
|
|
}
|