Scrum4Me/lib/auth-guard.ts
Scrum4Me Agent 5fd56e3f67 feat(ST-111ci8t4): admin user-actions (delete, updateRoles, setMustResetPassword)
- lib/session.ts: isAdmin: boolean toegevoegd aan SessionData
- lib/auth-guard.ts: requireAdmin() toegevoegd (redirect /dashboard bij !isAdmin)
- actions/admin/users.ts: deleteUserAction (zelfbescherming), updateUserRolesAction
  (Zod z.nativeEnum, eigen ADMIN-rol-beveiliging, transactie), setMustResetPasswordAction
  — alle drie 'use server', revalidatePath('/admin/users')
2026-05-05 14:38:42 +02:00

32 lines
795 B
TypeScript

import { redirect } from 'next/navigation'
import { getSession } from '@/lib/auth'
import { isPairedSessionExpired } from '@/lib/auth/pairing'
/**
* Layout-side auth guard. Returns the session when valid; otherwise redirects
* to /login (and destroys an expired paired-session first).
*
* Used by both `app/(app)/layout.tsx` (desktop) and `app/(mobile)/layout.tsx`.
*/
export async function requireSession() {
const session = await getSession()
if (!session.userId) {
redirect('/login')
}
if (isPairedSessionExpired(session)) {
await session.destroy()
redirect('/login')
}
return session
}
export async function requireAdmin() {
const session = await getSession()
if (!session.userId || !session.isAdmin) {
redirect('/dashboard')
}
return session
}