fixes + guest
This commit is contained in:
+59
-21
@@ -1,9 +1,37 @@
|
||||
import html
|
||||
import unicodedata
|
||||
|
||||
from ..config import PORTAL_PREFIX
|
||||
|
||||
APP_NAME = "CSBot Services Portal"
|
||||
|
||||
# Sekce viditelné pouze pro tento e-mail (Migration Readiness, Runtime Management, Environment).
|
||||
SUPER_ADMIN_EMAIL = "jiri.uhlir59@gmail.com"
|
||||
|
||||
# Admin menu: (popisek, odkaz, FA ikona, super_only). super_only = jen pro SUPER_ADMIN_EMAIL.
|
||||
ADMIN_MENU_ITEMS = [
|
||||
("Alerting", "/portal/alerting/rules", "fa-bell", False),
|
||||
("Audit", "/portal/audit", "fa-clipboard-list", False),
|
||||
("Environment", "/portal/admin/environment", "fa-sliders", True),
|
||||
("Incidenty", "/portal/incidents", "fa-triangle-exclamation", False),
|
||||
("Migration Readiness", "/portal/migration-readiness", "fa-diagram-project", True),
|
||||
("Nasazení", "/portal/deployments", "fa-rocket", False),
|
||||
("Plánované skripty", "/portal/scheduled-scripts", "fa-calendar-days", False),
|
||||
("Přehled", "/portal/operations", "fa-gauge-high", False),
|
||||
("Runtime Management", "/portal/admin/runtime", "fa-server", True),
|
||||
("Služby", "/portal/apps", "fa-server", False),
|
||||
("Úlohy", "/portal/jobs", "fa-list-check", False),
|
||||
("Users", "/portal/admin/users", "fa-users", False),
|
||||
("Workery", "/portal/workers", "fa-gears", False),
|
||||
("Zálohy", "/portal/backups", "fa-box-archive", False),
|
||||
]
|
||||
|
||||
|
||||
def _alpha_key(label: str) -> str:
|
||||
"""Řadicí klíč bez diakritiky (Plánované < Přehled < Služby < Úlohy ...)."""
|
||||
normalized = unicodedata.normalize("NFKD", label)
|
||||
return "".join(ch for ch in normalized if not unicodedata.combining(ch)).lower()
|
||||
|
||||
|
||||
def page(title: str, body: str, user=None) -> str:
|
||||
nav = ""
|
||||
@@ -12,26 +40,40 @@ def page(title: str, body: str, user=None) -> str:
|
||||
if user:
|
||||
username = html.escape(user.get("username", ""))
|
||||
display_name = html.escape(user.get("display_name") or user.get("username", ""))
|
||||
role = (user.get("role") or "").lower()
|
||||
email = (user.get("email") or "").strip().lower()
|
||||
can_operate = role in ("admin", "developer") # provozní sekce: jen dev nebo admin
|
||||
is_super = email == SUPER_ADMIN_EMAIL
|
||||
|
||||
# Guest nemá přístup nikam – nezobrazujeme mu žádné odkazy, jen odhlášení.
|
||||
is_guest = role == "guest"
|
||||
|
||||
# Hlavní navigace: Služby vidí každý přihlášený uživatel (kromě guesta); Úlohy, Plánované
|
||||
# skripty, Alerting a Pro vývojáře jen developer nebo admin.
|
||||
nav_links = ""
|
||||
if not is_guest:
|
||||
nav_links = '<a class="nav-link" href="/portal/apps"><i class="fa-solid fa-server" aria-hidden="true"></i> Služby</a>'
|
||||
if can_operate:
|
||||
nav_links += (
|
||||
'<a class="nav-link" href="/portal/jobs"><i class="fa-solid fa-list-check" aria-hidden="true"></i> Úlohy</a>'
|
||||
'<a class="nav-link" href="/portal/scheduled-scripts"><i class="fa-solid fa-calendar-days" aria-hidden="true"></i> Plánované skripty</a>'
|
||||
'<a class="nav-link" href="/portal/alerting/rules"><i class="fa-solid fa-bell" aria-hidden="true"></i> Alerting</a>'
|
||||
'<a class="nav-link" href="/portal/developers"><i class="fa-solid fa-code" aria-hidden="true"></i> Pro vývojáře</a>'
|
||||
)
|
||||
|
||||
admin_menu = ""
|
||||
if (user.get("role") or "").lower() == "admin":
|
||||
admin_menu = """
|
||||
if role == "admin":
|
||||
visible_items = [item for item in ADMIN_MENU_ITEMS if not item[3] or is_super]
|
||||
visible_items.sort(key=lambda item: _alpha_key(item[0]))
|
||||
admin_links = "".join(
|
||||
f'<a href="{href}"><i class="fa-solid {icon}" aria-hidden="true"></i> {html.escape(label)}</a>'
|
||||
for label, href, icon, _super_only in visible_items
|
||||
)
|
||||
admin_menu = f"""
|
||||
<details class="nav-menu">
|
||||
<summary class="nav-menu-button"><i class="fa-solid fa-screwdriver-wrench" aria-hidden="true"></i> Admin</summary>
|
||||
<div class="nav-menu-panel">
|
||||
<a href="/portal/operations"><i class="fa-solid fa-gauge-high" aria-hidden="true"></i> Přehled</a>
|
||||
<a href="/portal/apps"><i class="fa-solid fa-server" aria-hidden="true"></i> Služby</a>
|
||||
<a href="/portal/jobs"><i class="fa-solid fa-list-check" aria-hidden="true"></i> Úlohy</a>
|
||||
<a href="/portal/scheduled-scripts"><i class="fa-solid fa-calendar-days" aria-hidden="true"></i> Plánované skripty</a>
|
||||
<a href="/portal/alerting/rules"><i class="fa-solid fa-bell" aria-hidden="true"></i> Alerting</a>
|
||||
<a href="/portal/migration-readiness"><i class="fa-solid fa-diagram-project" aria-hidden="true"></i> Migration Readiness</a>
|
||||
<a href="/portal/deployments"><i class="fa-solid fa-rocket" aria-hidden="true"></i> Nasazení</a>
|
||||
<a href="/portal/incidents"><i class="fa-solid fa-triangle-exclamation" aria-hidden="true"></i> Incidenty</a>
|
||||
<a href="/portal/workers"><i class="fa-solid fa-gears" aria-hidden="true"></i> Workery</a>
|
||||
<a href="/portal/admin/runtime"><i class="fa-solid fa-server" aria-hidden="true"></i> Runtime Management</a>
|
||||
<a href="/portal/admin/environment"><i class="fa-solid fa-sliders" aria-hidden="true"></i> Environment</a>
|
||||
<a href="/portal/admin/users"><i class="fa-solid fa-users" aria-hidden="true"></i> Users</a>
|
||||
<a href="/portal/audit"><i class="fa-solid fa-clipboard-list" aria-hidden="true"></i> Audit</a>
|
||||
<a href="/portal/backups"><i class="fa-solid fa-box-archive" aria-hidden="true"></i> Zálohy</a>
|
||||
{admin_links}
|
||||
</div>
|
||||
</details>
|
||||
"""
|
||||
@@ -39,11 +81,7 @@ def page(title: str, body: str, user=None) -> str:
|
||||
<button type="button" class="nav-toggle" aria-label="Otevřít menu" onclick="togglePortalNav()"><i class="fa-solid fa-bars" aria-hidden="true"></i></button>
|
||||
<div class="nav-wrap" id="portal-nav">
|
||||
<nav>
|
||||
<a class="nav-link" href="/portal/apps"><i class="fa-solid fa-server" aria-hidden="true"></i> Služby</a>
|
||||
<a class="nav-link" href="/portal/jobs"><i class="fa-solid fa-list-check" aria-hidden="true"></i> Úlohy</a>
|
||||
<a class="nav-link" href="/portal/scheduled-scripts"><i class="fa-solid fa-calendar-days" aria-hidden="true"></i> Plánované skripty</a>
|
||||
<a class="nav-link" href="/portal/alerting/rules"><i class="fa-solid fa-bell" aria-hidden="true"></i> Alerting</a>
|
||||
<a class="nav-link" href="/portal/developers"><i class="fa-solid fa-code" aria-hidden="true"></i> Pro vývojáře</a>
|
||||
{nav_links}
|
||||
{admin_menu}
|
||||
<div class="user-menu">
|
||||
<span class="user-name">{display_name}</span>
|
||||
|
||||
Reference in New Issue
Block a user