diff --git a/middleware.ts b/middleware.ts index e35a30e..620918d 100644 --- a/middleware.ts +++ b/middleware.ts @@ -34,6 +34,24 @@ export async function middleware(request: NextRequest) { } const role = (session.user as { role?: string })?.role?.toLowerCase() ?? "agent" + const machinePersona = + role === "machine" + ? ((session.user as unknown as { machinePersona?: string }).machinePersona ?? "").toLowerCase() + : null + + // Ajusta destinos conforme persona da máquina para evitar loops login<->dashboard + if (role === "machine") { + // Evita enviar colaborador ao dashboard; redireciona para o Portal + if (pathname.startsWith("/dashboard") && machinePersona !== "manager") { + return NextResponse.redirect(new URL("/portal/tickets", request.url)) + } + // Evita mostrar login quando já há sessão de máquina + if (pathname === "/login") { + const target = machinePersona === "manager" ? "/dashboard" : "/portal/tickets" + const url = new URL(target, request.url) + return NextResponse.redirect(url) + } + } const isAdmin = role === "admin" // Em desenvolvimento, evitamos bloquear rotas admin por possíveis diferenças diff --git a/src/app/login/login-page-client.tsx b/src/app/login/login-page-client.tsx index dbd2c59..758c905 100644 --- a/src/app/login/login-page-client.tsx +++ b/src/app/login/login-page-client.tsx @@ -25,7 +25,17 @@ export function LoginPageClient() { useEffect(() => { if (isPending) return if (!session?.user) return - const destination = callbackUrl ?? "/dashboard" + const role = (session.user.role ?? "").toLowerCase() + const persona = (session.user as any).machinePersona + ? String((session.user as any).machinePersona).toLowerCase() + : null + const defaultDest = + role === "machine" + ? persona === "manager" + ? "/dashboard" + : "/portal/tickets" + : "/dashboard" + const destination = callbackUrl ?? defaultDest router.replace(destination) }, [callbackUrl, isPending, router, session?.user])