From 300f49c5a137887bae9e25f11b99d7dd32289c2f Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 24 Jan 2026 18:54:59 +0100 Subject: [PATCH] feat: add platform selection frontend for platform admins Frontend implementation of platform admin flow: - Update login.js to check for platform selection after login - Add platform selection page (/admin/select-platform) - Add platform context indicator in admin header - Add is_super_admin to UserResponse schema - Show "Super Admin" badge or platform name with switch option Platform admins now: 1. Login normally at /admin/login 2. Get redirected to /admin/select-platform if they have multiple platforms 3. See current platform in header with option to switch Co-Authored-By: Claude Opus 4.5 --- app/routes/admin_pages.py | 26 ++++ app/templates/admin/partials/header.html | 69 ++++++++++ app/templates/admin/select-platform.html | 130 +++++++++++++++++++ models/schema/auth.py | 1 + static/admin/js/login.js | 27 +++- static/admin/js/select-platform.js | 156 +++++++++++++++++++++++ 6 files changed, 406 insertions(+), 3 deletions(-) create mode 100644 app/templates/admin/select-platform.html create mode 100644 static/admin/js/select-platform.js diff --git a/app/routes/admin_pages.py b/app/routes/admin_pages.py index b03d5dda..4bfc1b3a 100644 --- a/app/routes/admin_pages.py +++ b/app/routes/admin_pages.py @@ -95,6 +95,32 @@ async def admin_login_page( return templates.TemplateResponse("admin/login.html", {"request": request}) +@router.get("/select-platform", response_class=HTMLResponse, include_in_schema=False) +async def admin_select_platform_page( + request: Request, + current_user: User | None = Depends(get_current_admin_optional), +): + """ + Render platform selection page for platform admins. + + Platform admins with access to multiple platforms must select + which platform they want to manage before accessing the dashboard. + Super admins are redirected to dashboard (they have global access). + """ + if not current_user: + # Not logged in, redirect to login + return RedirectResponse(url="/admin/login", status_code=302) + + if current_user.is_super_admin: + # Super admins don't need platform selection + return RedirectResponse(url="/admin/dashboard", status_code=302) + + return templates.TemplateResponse( + "admin/select-platform.html", + {"request": request, "user": current_user}, + ) + + # ============================================================================ # AUTHENTICATED ROUTES (Admin Only) # ============================================================================ diff --git a/app/templates/admin/partials/header.html b/app/templates/admin/partials/header.html index 38a0e621..4236725c 100644 --- a/app/templates/admin/partials/header.html +++ b/app/templates/admin/partials/header.html @@ -20,6 +20,27 @@