fix(frontend): pilot-only юзер → auto-redirect на /trade-in/ вместо «Доступа нет» (#799) #812

Closed
bot-frontend wants to merge 1 commit from feat/799-pilot-redirect-v2 into main

View file

@ -61,6 +61,21 @@ export function RouteGuard({ children }: RouteGuardProps) {
// Path-level guard на прямой URL. Backend всё равно 403 на /api/v1/admin/*,
// но мы не хотим показать «битый admin UI» — лучше сразу stop.
if (!isPathAllowed(data.allowed_paths, data.deny_paths, pathname)) {
// #799: pilot-only юзер (единственная доступная зона — trade-in) на
// запрещённом пути главного фронта (корень `/` и пр.) → авто-redirect в
// /trade-in/ вместо дед-энда «Доступа нет». Условия:
// - текущий путь НЕ под /trade-in (иначе цикл; /trade-in — отдельный
// bundle за Caddy, этот гард его не обслуживает, но guard на всякий);
// - у роли есть доступ к /trade-in/ (т.е. trade-in — её рабочая зона).
// admin / multi-scope с разрешённым `/` сюда не попадают (isPathAllowed=true).
if (
typeof window !== "undefined" &&
!pathname.startsWith("/trade-in") &&
isPathAllowed(data.allowed_paths, data.deny_paths, "/trade-in/")
) {
window.location.replace("/trade-in/");
return null;
}
return <NoAccessScreen variant="path" path={pathname} />;
}