diff --git a/frontend/src/routes/household/staples/+server.ts b/frontend/src/routes/household/staples/+server.ts index 11ac42f..ebc3f3a 100644 --- a/frontend/src/routes/household/staples/+server.ts +++ b/frontend/src/routes/household/staples/+server.ts @@ -2,7 +2,11 @@ import { json } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; import { apiClient } from '$lib/server/api'; -export const PATCH: RequestHandler = async ({ request, fetch }) => { +export const PATCH: RequestHandler = async ({ request, fetch, locals }) => { + if (locals.benutzer?.rolle !== 'planer') { + return json({ error: 'Forbidden' }, { status: 403 }); + } + const body = await request.json(); const { id, isStaple } = body; diff --git a/frontend/src/routes/household/staples/server.test.ts b/frontend/src/routes/household/staples/server.test.ts index 10b3c04..0490cf5 100644 --- a/frontend/src/routes/household/staples/server.test.ts +++ b/frontend/src/routes/household/staples/server.test.ts @@ -18,12 +18,13 @@ describe('household staples PATCH handler', () => { PATCH = mod.PATCH; }); - function createRequest(body: object) { + function createRequest(body: object, rolle: 'planer' | 'mitglied' = 'planer') { return { request: { json: () => Promise.resolve(body) }, - fetch: vi.fn() + fetch: vi.fn(), + locals: { benutzer: { rolle } } } as any; } @@ -76,6 +77,13 @@ describe('household staples PATCH handler', () => { expect(mockPatch).not.toHaveBeenCalled(); }); + it('returns 403 when caller has mitglied role', async () => { + const response = await PATCH(createRequest({ id: 'ing-1', isStaple: true }, 'mitglied')); + + expect(response.status).toBe(403); + expect(mockPatch).not.toHaveBeenCalled(); + }); + it('returns 400 when isStaple is not a boolean', async () => { const response = await PATCH(createRequest({ id: 'ing-1', isStaple: 'yes' }));