Files
Entkube/src/EntKube.Web/Components/Layout/NavMenu.razor
Nils Blomgren 5da40698ad
Some checks failed
Build and Deploy / Build and push image (push) Failing after 5m50s
Build and Deploy / Deploy to server (push) Has been skipped
server management
2026-06-11 15:09:31 +02:00

140 lines
5.3 KiB
Plaintext

@implements IDisposable
@inject NavigationManager NavigationManager
@inject AuthenticationStateProvider AuthStateProvider
@inject EntKube.Web.Services.UserAccessService UserAccessService
@inject IConfiguration Configuration
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">EntKube</a>
</div>
</div>
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
<nav class="nav flex-column">
<div class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
</NavLink>
</div>
@if (showTenantsLink)
{
<div class="nav-item px-3">
<NavLink class="nav-link" href="tenants">
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Tenants
</NavLink>
</div>
}
<div class="nav-item px-3">
<NavLink class="nav-link" href="portal">
<span class="bi bi-grid-nav-menu" aria-hidden="true"></span> Portal
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="portal/status">
<span class="bi bi-activity-nav-menu" aria-hidden="true"></span> Status
</NavLink>
</div>
<AuthorizeView Roles="Admin">
<Authorized>
<div class="nav-item px-3">
<NavLink class="nav-link" href="admin/users">
<span class="bi bi-people-nav-menu" aria-hidden="true"></span> Users
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="admin/roles">
<span class="bi bi-shield-lock-nav-menu" aria-hidden="true"></span> Roles
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="admin/backup">
<span class="bi bi-arrow-repeat-nav-menu" aria-hidden="true"></span> Backup
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="admin/notifications">
<span class="bi bi-bell-nav-menu" aria-hidden="true"></span> Notifications
</NavLink>
</div>
</Authorized>
</AuthorizeView>
<AuthorizeView>
<Authorized>
<div class="nav-item px-3">
<NavLink class="nav-link" href="Account/Manage">
<span class="bi bi-person-fill-nav-menu" aria-hidden="true"></span> @context.User.Identity?.Name
</NavLink>
</div>
<div class="nav-item px-3">
<form action="Account/Logout" method="post">
<AntiforgeryToken />
<input type="hidden" name="ReturnUrl" value="@currentUrl" />
<button type="submit" class="nav-link">
<span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true"></span> Logout
</button>
</form>
</div>
</Authorized>
<NotAuthorized>
@if (allowRegistration)
{
<div class="nav-item px-3">
<NavLink class="nav-link" href="Account/Register">
<span class="bi bi-person-nav-menu" aria-hidden="true"></span> Register
</NavLink>
</div>
}
<div class="nav-item px-3">
<NavLink class="nav-link" href="Account/Login">
<span class="bi bi-person-badge-nav-menu" aria-hidden="true"></span> Login
</NavLink>
</div>
</NotAuthorized>
</AuthorizeView>
</nav>
</div>
@code {
private string? currentUrl;
private bool showTenantsLink;
private bool allowRegistration = true;
protected override async Task OnInitializedAsync()
{
currentUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri);
NavigationManager.LocationChanged += OnLocationChanged;
allowRegistration = Configuration.GetValue<bool>("Auth:AllowRegistration", true);
AuthenticationState authState = await AuthStateProvider.GetAuthenticationStateAsync();
System.Security.Claims.ClaimsPrincipal user = authState.User;
if (user.Identity?.IsAuthenticated == true)
{
string? userId = user.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
if (userId is not null)
showTenantsLink = await UserAccessService.HasAnyAccessAsync(userId);
}
}
private void OnLocationChanged(object? sender, LocationChangedEventArgs e)
{
currentUrl = NavigationManager.ToBaseRelativePath(e.Location);
StateHasChanged();
}
public void Dispose()
{
NavigationManager.LocationChanged -= OnLocationChanged;
}
}