first commit ish

This commit is contained in:
Nils Blomgren
2026-06-04 08:51:22 +02:00
parent e0f967482e
commit 658f15d086
320 changed files with 307404 additions and 1187 deletions

View File

@@ -4,6 +4,8 @@
@using Microsoft.EntityFrameworkCore
@rendermode InteractiveServer
@inject TenantService TenantService
@inject UserAccessService UserAccessService
@inject AuthenticationStateProvider AuthStateProvider
@inject NavigationManager Navigation
<PageTitle>@(tenant?.Name ?? "Tenant")</PageTitle>
@@ -68,6 +70,56 @@ else
<i class="bi bi-person-badge me-1"></i>Identity
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "registry" ? "active" : "")" @onclick='() => activeTab = "registry"'>
<i class="bi bi-archive me-1"></i>Registry
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "messaging" ? "active" : "")" @onclick='() => activeTab = "messaging"'>
<i class="bi bi-collection me-1"></i>Messaging
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "cache" ? "active" : "")" @onclick='() => activeTab = "cache"'>
<i class="bi bi-lightning-charge me-1"></i>Cache
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "overview" ? "active" : "")" @onclick='() => activeTab = "overview"'>
<i class="bi bi-speedometer2 me-1"></i>Overview
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "incidents" ? "active" : "")" @onclick='() => activeTab = "incidents"'>
<i class="bi bi-bell-fill me-1"></i>Incidents
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "notifications" ? "active" : "")" @onclick='() => activeTab = "notifications"'>
<i class="bi bi-send-fill me-1"></i>Notifications
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "maintenance" ? "active" : "")" @onclick='() => activeTab = "maintenance"'>
<i class="bi bi-tools me-1"></i>Maintenance
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "sla" ? "active" : "")" @onclick='() => activeTab = "sla"'>
<i class="bi bi-shield-check me-1"></i>SLA
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "networking" ? "active" : "")" @onclick='() => activeTab = "networking"'>
<i class="bi bi-shield-lock me-1"></i>Networking
</button>
</li>
<li class="nav-item">
<button class="nav-link @(activeTab == "git" ? "active" : "")" @onclick='() => activeTab = "git"'>
<i class="bi bi-git me-1"></i>Git
</button>
</li>
</ul>
<div class="tab-content">
@@ -94,6 +146,36 @@ else
case "identity":
<IdentityTab TenantId="tenant.Id" />
break;
case "registry":
<RegistryTab TenantId="tenant.Id" />
break;
case "messaging":
<MessagingTab TenantId="tenant.Id" />
break;
case "cache":
<CacheTab TenantId="tenant.Id" />
break;
case "overview":
<TenantMonitoringOverview TenantId="tenant.Id" TenantSlug="tenant.Slug" />
break;
case "incidents":
<IncidentManagement TenantId="tenant.Id" />
break;
case "notifications":
<NotificationChannels TenantId="tenant.Id" />
break;
case "maintenance":
<MaintenanceWindows TenantId="tenant.Id" />
break;
case "sla":
<SlaTargetManager TenantId="tenant.Id" />
break;
case "networking":
<NetworkingTab TenantId="tenant.Id" />
break;
case "git":
<GitReposTab TenantId="tenant.Id" />
break;
}
</div>
}
@@ -106,11 +188,35 @@ else
protected override async Task OnInitializedAsync()
{
AuthenticationState authState = await AuthStateProvider.GetAuthenticationStateAsync();
System.Security.Claims.ClaimsPrincipal user = authState.User;
if (user.Identity?.IsAuthenticated != true)
{
Navigation.NavigateTo("/Account/Login", forceLoad: true);
return;
}
string? userId = user.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
if (userId is null)
{
Navigation.NavigateTo("/Account/Login", forceLoad: true);
return;
}
tenant = await TenantService.GetTenantBySlugAsync(Slug);
if (tenant is null)
{
Navigation.NavigateTo("/tenants");
return;
}
bool canAccess = await UserAccessService.HasTenantAccessAsync(userId, tenant.Id);
if (!canAccess)
{
bool hasMembership = await UserAccessService.HasAnyTenantMembershipAsync(userId);
Navigation.NavigateTo(hasMembership ? "/tenants" : "/portal");
}
}
}