fix(security): Befunde aus dem Security-Audit beheben #7
No files matched your search
@@ -16,9 +16,15 @@ describe('mapGroupsToPermissions', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('mappt PM_Buchhaltung auf PROCESS_MANUALLY', () => {
|
it('PM_Buchhaltung enthält den Posteingang (abgespeckte Buchhaltung)', () => {
|
||||||
expect(mapGroupsToPermissions(['PM_Buchhaltung'])).toEqual([
|
expect(mapGroupsToPermissions(['PM_Buchhaltung']).sort()).toEqual(
|
||||||
Permission.PROCESS_MANUALLY,
|
[Permission.PROCESS_MANUALLY, Permission.VIEW_INBOX].sort(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PM_Posteingang bekommt nur den Posteingang', () => {
|
||||||
|
expect(mapGroupsToPermissions(['PM_Posteingang'])).toEqual([
|
||||||
|
Permission.VIEW_INBOX,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,4 +58,37 @@ describe('mapGroupsToPermissions', () => {
|
|||||||
const frontend = groupNames(readFileSync(frontendFile, 'utf8'));
|
const frontend = groupNames(readFileSync(frontendFile, 'utf8'));
|
||||||
expect(backend).toEqual(frontend);
|
expect(backend).toEqual(frontend);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Gleiche Gruppennamen reichen nicht – jede Gruppe muss auch dieselben
|
||||||
|
// Berechtigungen bekommen (z.B. PM_Buchhaltung inkl. VIEW_INBOX).
|
||||||
|
it('vergibt pro Gruppe dieselben Berechtigungen wie das Frontend', () => {
|
||||||
|
const frontendFile = join(
|
||||||
|
__dirname,
|
||||||
|
'../../../paperless-frontend/src/auth/permissions.ts',
|
||||||
|
);
|
||||||
|
if (!existsSync(frontendFile)) return;
|
||||||
|
|
||||||
|
const mapping = (source: string) => {
|
||||||
|
const ergebnis: Record<string, string[]> = {};
|
||||||
|
const treffer = [...source.matchAll(/groups\.includes\('([^']+)'\)/g)];
|
||||||
|
treffer.forEach((m, i) => {
|
||||||
|
const ende = treffer[i + 1]?.index ?? source.length;
|
||||||
|
const block = source.slice(m.index, ende);
|
||||||
|
ergebnis[m[1]] = [
|
||||||
|
...new Set(
|
||||||
|
[...block.matchAll(/permissions\.add\(Permission\.(\w+)\)/g)].map(
|
||||||
|
(p) => p[1],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
].sort();
|
||||||
|
});
|
||||||
|
return ergebnis;
|
||||||
|
};
|
||||||
|
|
||||||
|
const backend = mapping(
|
||||||
|
readFileSync(join(__dirname, 'permissions.enum.ts'), 'utf8'),
|
||||||
|
);
|
||||||
|
expect(backend['PM_Buchhaltung']).toContain('VIEW_INBOX');
|
||||||
|
expect(mapping(readFileSync(frontendFile, 'utf8'))).toEqual(backend);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
@@ -34,8 +34,11 @@ export function mapGroupsToPermissions(
|
|||||||
|
|
||||||
// Gruppe wurde in Authentik von 'PM_Belege' zu 'PM_Buchhaltung' umbenannt.
|
// Gruppe wurde in Authentik von 'PM_Belege' zu 'PM_Buchhaltung' umbenannt.
|
||||||
// Muss identisch zu paperless-frontend/src/auth/permissions.ts bleiben.
|
// Muss identisch zu paperless-frontend/src/auth/permissions.ts bleiben.
|
||||||
if (groups.includes('PM_Buchhaltung'))
|
// Der Posteingang ist eine abgespeckte Buchhaltung – PM_Buchhaltung umfasst ihn.
|
||||||
|
if (groups.includes('PM_Buchhaltung')) {
|
||||||
permissions.add(Permission.PROCESS_MANUALLY);
|
permissions.add(Permission.PROCESS_MANUALLY);
|
||||||
|
permissions.add(Permission.VIEW_INBOX);
|
||||||
|
}
|
||||||
if (groups.includes('PM_Maileingang')) permissions.add(Permission.VIEW_MAIL);
|
if (groups.includes('PM_Maileingang')) permissions.add(Permission.VIEW_MAIL);
|
||||||
if (groups.includes('PM_Posteingang')) permissions.add(Permission.VIEW_INBOX);
|
if (groups.includes('PM_Posteingang')) permissions.add(Permission.VIEW_INBOX);
|
||||||
if (groups.includes('PM_Scanner')) permissions.add(Permission.VIEW_SCANNER);
|
if (groups.includes('PM_Scanner')) permissions.add(Permission.VIEW_SCANNER);
|
||||||
|
|||||||
@@ -31,8 +31,11 @@ export function mapGroupsToPermissions(groups: string[] | undefined | null): Per
|
|||||||
return Array.from(permissions);
|
return Array.from(permissions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Der Posteingang ist eine abgespeckte Buchhaltung – PM_Buchhaltung umfasst ihn.
|
||||||
|
// Muss identisch zu paperless-backend/src/auth/permissions.enum.ts bleiben.
|
||||||
if (groups.includes('PM_Buchhaltung')) {
|
if (groups.includes('PM_Buchhaltung')) {
|
||||||
permissions.add(Permission.PROCESS_MANUALLY);
|
permissions.add(Permission.PROCESS_MANUALLY);
|
||||||
|
permissions.add(Permission.VIEW_INBOX);
|
||||||
}
|
}
|
||||||
if (groups.includes('PM_Maileingang')) {
|
if (groups.includes('PM_Maileingang')) {
|
||||||
permissions.add(Permission.VIEW_MAIL);
|
permissions.add(Permission.VIEW_MAIL);
|
||||||
|
|||||||
Reference in new issue
Block a user