Compare commits

..

No commits in common. "27dafa1c34d4260ff8ce1c5b6a6599f64f8e1236" and "b7c1eb8bb7a401c98b8c91e5c60105002a8b517c" have entirely different histories.

3 changed files with 23 additions and 16 deletions

View File

@ -1,12 +1,10 @@
import { NextResponse } from 'next/server';
import { requireRole } from '../../../lib/auth/session';
import { disablePilotView, requireRole } from '../../../lib/auth/session';
export async function GET(request: Request) {
// Возвращаем HR к своему интерфейсу.
// Cookie `alabuga_view_as` хранит флаг режима просмотра, удаляем его и редиректим в админку.
await requireRole('hr');
const response = NextResponse.redirect(new URL('/admin', request.url));
response.cookies.delete('alabuga_view_as');
return response;
disablePilotView();
return NextResponse.redirect(new URL('/admin', request.url));
}

View File

@ -1,18 +1,10 @@
import { NextResponse } from 'next/server';
import { requireRole } from '../../../lib/auth/session';
import { enablePilotView, requireRole } from '../../../lib/auth/session';
export async function GET(request: Request) {
// Доступно только HR: включаем режим просмотра и отправляем на дашборд кандидата.
// Благодаря этому HR увидит интерфейс пилота без необходимости заводить отдельную учётку.
await requireRole('hr');
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;
enablePilotView();
return NextResponse.redirect(new URL('/', request.url));
}

View File

@ -47,6 +47,7 @@ export async function getSession(): Promise<SessionPayload | null> {
return { ...session, viewAsPilot };
} catch (error) {
console.warn('Session validation failed:', error);
store.delete(SESSION_COOKIE);
return null;
}
}
@ -93,3 +94,19 @@ 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);
}