@page "/setup/accounts" @attribute [Authorize(Policy = "OwnerOnly")] @rendermode InteractiveServer @using CannedNet.Admin.Models @using CannedNet.Admin.Services @inject AdminAuthService AuthService Admin Accounts

Admin Accounts

Manage admin panel accounts. Only the owner can create or delete accounts.

Create New Admin Account
@if (!string.IsNullOrEmpty(createMessage)) { @createMessage }
Admin Accounts
@foreach (var user in AuthService.GetAll()) { } else { } }
ID Username Role Created Actions
@user.Id @user.Username @if (user.IsOwner) { OwnerAdmin @user.CreatedAt.ToString("g") @if (!user.IsOwner) { }
@code { private string newUsername = ""; private string newPassword = ""; private string newConfirmPassword = ""; private bool creating; private string? createMessage; private async Task CreateAccount() { creating = true; createMessage = null; try { if (string.IsNullOrWhiteSpace(newUsername)) { createMessage = "Username is required."; return; } if (string.IsNullOrWhiteSpace(newPassword) || newPassword.Length < 6) { createMessage = "Password must be at least 6 characters."; return; } if (newPassword != newConfirmPassword) { createMessage = "Passwords do not match."; return; } if (AuthService.GetByUsername(newUsername) != null) { createMessage = "Username already exists."; return; } AuthService.CreateUser(newUsername, newPassword, isOwner: false); createMessage = "Admin account created successfully!"; newUsername = ""; newPassword = ""; newConfirmPassword = ""; } catch (Exception ex) { createMessage = $"Error: {ex.Message}"; } finally { creating = false; } } private async Task DeleteUser(int id) { var confirmed = await JSRuntime.InvokeAsync("confirm", "Delete this admin account?"); if (!confirmed) return; AuthService.DeleteUser(id); } [Inject] private IJSRuntime JSRuntime { get; set; } = default!; }