fix(frontend): pilot-only юзер → auto-redirect на /trade-in/ вместо «Доступа нет»
RouteGuard: при denied path главного фронта (корень / и пр.) если у роли
единственная рабочая зона — trade-in (isPathAllowed(/trade-in/)=true) →
window.location.replace('/trade-in/') вместо дед-энда NoAccessScreen.
Guard от петли: не редиректить если путь уже под /trade-in. admin/multi-scope
с разрешённым / не затронуты. Вариант 2 из issue (без Caddy/backend).
Refs #799
This commit is contained in:
parent
a7a839b512
commit
e195828c7f
1 changed files with 15 additions and 0 deletions
|
|
@ -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} />;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue