feat: hide user nav links for admin, redirect admin to /admin/users on login

Connections/Catalog/VK/Sync nav links only shown for regular users or when
admin is viewing as a user. Admin/system users land on /admin/users after login.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mguschin
2026-05-13 20:48:02 +03:00
parent 5e7be16755
commit 8549e98f8d
2 changed files with 12 additions and 2 deletions

View File

@@ -1,6 +1,6 @@
import logging import logging
from fastapi import FastAPI, Request from fastapi import Depends, FastAPI, Request
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from starlette.middleware.sessions import SessionMiddleware from starlette.middleware.sessions import SessionMiddleware
@@ -40,6 +40,8 @@ from web.routes.connections import router as connections_router # noqa: E402
from web.routes.vk_catalog import router as vk_catalog_router # noqa: E402 from web.routes.vk_catalog import router as vk_catalog_router # noqa: E402
from web.routes.logs import router as logs_router # noqa: E402 from web.routes.logs import router as logs_router # noqa: E402
from web.routes.sync import router as sync_router # noqa: E402 from web.routes.sync import router as sync_router # noqa: E402
from web.database import get_db # noqa: E402
from web.models.user import User # noqa: E402
app.include_router(auth_router) app.include_router(auth_router)
app.include_router(reset_router) app.include_router(reset_router)
@@ -69,10 +71,14 @@ async def health():
# ── Root redirect ───────────────────────────────────────────────────────────── # ── Root redirect ─────────────────────────────────────────────────────────────
@app.get("/") @app.get("/")
async def root(request: Request): async def root(request: Request, db=Depends(get_db)):
from fastapi.responses import RedirectResponse from fastapi.responses import RedirectResponse
from web.models.user import UserRoleEnum
user_id = request.session.get("user_id") user_id = request.session.get("user_id")
if user_id: if user_id:
user = db.get(User, user_id)
if user and user.role in (UserRoleEnum.admin, UserRoleEnum.system):
return RedirectResponse("/admin/users", 303)
return RedirectResponse("/profile", 303) return RedirectResponse("/profile", 303)
return RedirectResponse("/login", 303) return RedirectResponse("/login", 303)

View File

@@ -16,10 +16,12 @@
</ul> </ul>
<ul class="nav-links"> <ul class="nav-links">
{% if user %} {% if user %}
{% if user.role not in ('admin', 'system') or viewed_user %}
<li><a href="/connections">Подключения</a></li> <li><a href="/connections">Подключения</a></li>
<li><a href="/catalog">Каталог Эвотор</a></li> <li><a href="/catalog">Каталог Эвотор</a></li>
<li><a href="/vk-catalog/albums">Каталог ВК</a></li> <li><a href="/vk-catalog/albums">Каталог ВК</a></li>
<li><a href="/sync">Синхронизация</a></li> <li><a href="/sync">Синхронизация</a></li>
{% endif %}
{% if user.role in ('admin', 'system') %} {% if user.role in ('admin', 'system') %}
<li><a href="/admin/users"><i class="bi bi-shield-lock"></i> Админ</a></li> <li><a href="/admin/users"><i class="bi bi-shield-lock"></i> Админ</a></li>
<li><a href="/admin/logs"><i class="bi bi-journal-text"></i> Логи</a></li> <li><a href="/admin/logs"><i class="bi bi-journal-text"></i> Логи</a></li>
@@ -34,10 +36,12 @@
<details class="mobile-menu"> <details class="mobile-menu">
<summary role="button" class="outline secondary icon-btn"><i class="bi bi-list"></i></summary> <summary role="button" class="outline secondary icon-btn"><i class="bi bi-list"></i></summary>
<ul> <ul>
{% if user.role not in ('admin', 'system') or viewed_user %}
<li><a href="/connections">Подключения</a></li> <li><a href="/connections">Подключения</a></li>
<li><a href="/catalog">Каталог Эвотор</a></li> <li><a href="/catalog">Каталог Эвотор</a></li>
<li><a href="/vk-catalog/albums">Каталог ВК</a></li> <li><a href="/vk-catalog/albums">Каталог ВК</a></li>
<li><a href="/sync">Синхронизация</a></li> <li><a href="/sync">Синхронизация</a></li>
{% endif %}
{% if user.role in ('admin', 'system') %} {% if user.role in ('admin', 'system') %}
<li><a href="/admin/users">Админ</a></li> <li><a href="/admin/users">Админ</a></li>
<li><a href="/admin/logs">Логи</a></li> <li><a href="/admin/logs">Логи</a></li>