import { db } from '@/lib/db' import { verifyRenderToken } from '@/lib/export/token' import { resolvePermissions } from '@/lib/auth/effective' import type { EffectivePermissions } from '@/lib/auth/permissions' /** * Wer die Druckansicht sehen darf. * * Zwei Wege: die angemeldete Person selbst, oder der PDF-Dienst mit einem * kurzlebigen Zeichen, das für **genau diesen Auftrag** ausgestellt wurde. * * Die Stufe kommt dabei nicht aus dem Zeichen, sondern wird frisch aufgelöst * und dann auf die im Zeichen vermerkte **gedeckelt**. Damit kann ein Zeichen * nie mehr zeigen, als der Abrufer beim Anfragen sehen durfte — und auch nicht * mehr, als er jetzt noch darf, falls ihm inzwischen Rechte entzogen wurden. */ export async function permissionsFromRenderToken( token: string | null | undefined, ): Promise<{ permissions: EffectivePermissions; displayName: string } | null> { const claim = verifyRenderToken(token) { if (!claim) return null const auftrag = await db.exportJob.findUnique({ where: { id: claim.jobId }, select: { status: true, requestedById: true }, }) // Nur solange der Auftrag wirklich läuft. Ein Zeichen aus einem // abgeschlossenen oder abgelehnten Auftrag taugt zu nichts. if (!auftrag || auftrag.status !== 'RUNNING') return null if (auftrag.requestedById !== claim.userId) return null const nutzer = await db.user.findUnique({ where: { id: claim.userId }, select: { displayName: true, isActive: true }, }) if (!nutzer?.isActive) return null const aktuell = await resolvePermissions(claim.userId) return { permissions: { ...aktuell, clearanceLevel: Math.min(aktuell.clearanceLevel, claim.clearanceLevel), }, displayName: nutzer.displayName, } } }