From 45bfee78fba7c9c8edffa22a857ddbe38d16a855 Mon Sep 17 00:00:00 2001 From: demidovez Date: Fri, 3 Oct 2025 14:09:25 +0300 Subject: [PATCH] refactor: exit-view and view-as routes to manage cookies directly --- frontend/src/app/admin/exit-view/route.ts | 8 +++++--- frontend/src/app/admin/view-as/route.ts | 14 +++++++++++--- frontend/src/lib/auth/session.ts | 17 ----------------- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/frontend/src/app/admin/exit-view/route.ts b/frontend/src/app/admin/exit-view/route.ts index 8bdc28f..70090fb 100644 --- a/frontend/src/app/admin/exit-view/route.ts +++ b/frontend/src/app/admin/exit-view/route.ts @@ -1,10 +1,12 @@ import { NextResponse } from 'next/server'; -import { disablePilotView, requireRole } from '../../../lib/auth/session'; +import { requireRole } from '../../../lib/auth/session'; export async function GET(request: Request) { // Возвращаем HR к своему интерфейсу. // Cookie `alabuga_view_as` хранит флаг режима просмотра, удаляем его и редиректим в админку. await requireRole('hr'); - disablePilotView(); - return NextResponse.redirect(new URL('/admin', request.url)); + + const response = NextResponse.redirect(new URL('/admin', request.url)); + response.cookies.delete('alabuga_view_as'); + return response; } diff --git a/frontend/src/app/admin/view-as/route.ts b/frontend/src/app/admin/view-as/route.ts index 99c05c0..aa40dea 100644 --- a/frontend/src/app/admin/view-as/route.ts +++ b/frontend/src/app/admin/view-as/route.ts @@ -1,10 +1,18 @@ import { NextResponse } from 'next/server'; -import { enablePilotView, requireRole } from '../../../lib/auth/session'; +import { requireRole } from '../../../lib/auth/session'; export async function GET(request: Request) { // Доступно только HR: включаем режим просмотра и отправляем на дашборд кандидата. // Благодаря этому HR увидит интерфейс пилота без необходимости заводить отдельную учётку. await requireRole('hr'); - enablePilotView(); - return NextResponse.redirect(new URL('/', request.url)); + + const response = NextResponse.redirect(new URL('/', request.url)); + response.cookies.set('alabuga_view_as', 'pilot', { + httpOnly: true, + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + path: '/', + maxAge: 60 * 60, + }); + return response; } diff --git a/frontend/src/lib/auth/session.ts b/frontend/src/lib/auth/session.ts index 818c7b9..46b317a 100644 --- a/frontend/src/lib/auth/session.ts +++ b/frontend/src/lib/auth/session.ts @@ -47,7 +47,6 @@ export async function getSession(): Promise { return { ...session, viewAsPilot }; } catch (error) { console.warn('Session validation failed:', error); - store.delete(SESSION_COOKIE); return null; } } @@ -94,19 +93,3 @@ export function destroySession() { store.delete(SESSION_COOKIE); store.delete(VIEW_COOKIE); } - -export function enablePilotView(): void { - // HR включает режим просмотра интерфейса пилота, чтобы видеть клиентские экраны. - cookies().set(VIEW_COOKIE, 'pilot', { - httpOnly: true, - sameSite: 'lax', - secure: process.env.NODE_ENV === 'production', - path: '/', - maxAge: 60 * 60, - }); -} - -export function disablePilotView(): void { - // Возвращаем интерфейс HR к обычному виду. - cookies().delete(VIEW_COOKIE); -}