@page "/admin/users"
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
@inject IUserService UserService
@inject IUserContextAccessor UserContext
@inject NavigationManager Nav
@rendermode InteractiveServer
@using SharepointToolbox.Web.Core.Models
@using SharepointToolbox.Web.Services.Auth
@using SharepointToolbox.Web.Services.Session
User Management
Manage technician accounts and roles. Auto-provisioned on first OIDC login.
@if (!UserContext.IsAuthenticated || UserContext.Role != UserRole.Admin)
{
Access denied. Admin role required.
return;
}
@if (!string.IsNullOrEmpty(_message))
{
@_message
}
@if (_users.Count == 0)
{
No users provisioned yet.
}
else
{
| User |
Email |
Role |
Last Login |
Actions |
@foreach (var user in _users)
{
| @user.DisplayName |
@user.Email |
|
@(user.LastLogin?.ToString("yyyy-MM-dd HH:mm") ?? "Never") |
@if (user.Email != UserContext.Email)
{
}
else
{
You
}
|
}
}
@code {
private List _users = new();
private string _message = string.Empty;
private bool _isError;
protected override async Task OnInitializedAsync()
{
_users = (await UserService.GetAllAsync()).ToList();
}
private async Task OnRoleChange(AppUser user, ChangeEventArgs e)
{
if (!Enum.TryParse(e.Value?.ToString(), out var newRole)) return;
try
{
await UserService.UpdateRoleAsync(user.Id, newRole);
user.Role = newRole;
_message = $"Role updated for {user.DisplayName}.";
_isError = false;
}
catch (Exception ex)
{
_message = $"Error: {ex.Message}";
_isError = true;
}
}
private async Task DeleteUserAsync(AppUser user)
{
await UserService.DeleteAsync(user.Id);
_users.Remove(user);
_message = $"User {user.DisplayName} removed.";
_isError = false;
}
}