diff --git a/backend/app/deps.py b/backend/app/deps.py index df0cc68..454cab7 100644 --- a/backend/app/deps.py +++ b/backend/app/deps.py @@ -36,8 +36,10 @@ async def get_current_admin( current_user: User = Depends(get_current_user), ) -> User: if not current_user.is_superuser: + # Return 404 instead of 403 — reveals neither the existence of the + # endpoint nor that the caller lacks permission. raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="Admin access required", + status_code=status.HTTP_404_NOT_FOUND, + detail="Not found", ) return current_user diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 44ba8ec..18c534a 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -21,7 +21,8 @@ function AdminRoute({ children }: { children: React.ReactNode }) { if (!token) return ; // Wait for the me query before deciding — prevents a flash redirect if (isLoading) return null; - if (!user?.is_admin) return ; + // Redirect to /login (not /) so the route appears not to exist + if (!user?.is_admin) return ; return <>{children}; }