@page "/Settings/Users" @using LANCommander.Server.Settings @using LANCommander.Server.UI.Pages.Settings.Users.Components @using Microsoft.Extensions.Options @inject UserService UserService @inject IOptions Settings @inject SettingsProvider SettingsProvider @inject ModalService ModalService @inject IMessageService MessageService @inject NavigationManager NavigationManager @attribute [Authorize(Roles = RoleService.AdministratorRoleName)] @foreach (var role in context.Roles) { @role.Name } @if (Settings.Value.Server.Authentication.RequireApproval) { } @if (Settings.Value.Server.Authentication.RequireApproval && !context.Approved) { Approve } Manage Roles Change Password @if (!context.Roles?.Any(r => r.Name == RoleService.AdministratorRoleName) ?? true) { Promote } else { Demote } Edit @code { ICollection UserList { get; set; } = new List(); bool Loading = true; bool CreateUserDialogVisible = false; DataTable Table; int Total; private async Task ApproveUser(User user) { var dbUser = await UserService.GetAsync(user.Id); if (dbUser != null) { dbUser.Approved = true; dbUser.ApprovedOn = DateTime.UtcNow; await UserService.UpdateAsync(dbUser); await MessageService.SuccessAsync($"Approved {user.UserName}!"); await Table.ReloadAsync(); } } private async Task PromoteUser(User user) { var dbUser = await UserService.GetAsync(user.Id); await UserService.AddToRoleAsync(dbUser.UserName, RoleService.AdministratorRoleName); await MessageService.SuccessAsync($"Promoted {user.UserName}!"); await Table.ReloadAsync(); } private async Task DemoteUser(User user) { var dbUser = await UserService.GetAsync(user.Id); if (UserList.SelectMany(u => u.Roles).Count(r => r == RoleService.AdministratorRoleName) == 1) { MessageService.Error("Cannot demote the only administrator!"); } else { await UserService.RemoveFromRole(dbUser.UserName, RoleService.AdministratorRoleName); await Table.ReloadAsync(); } } private async Task DeleteUser(User user) { var dbUser = await UserService.GetAsync(user.Id); if (UserList.SelectMany(u => u.Roles).Count(r => r == RoleService.AdministratorRoleName) == 1 && user.Roles.Any(r => r.Name == RoleService.AdministratorRoleName)) { MessageService.Error("Cannot delete the only administrator!"); } else { await UserService.DeleteAsync(dbUser); await Table.ReloadAsync(); MessageService.Success($"Deleted {user.UserName}!"); } } private void ChangePassword(User user) { NavigationManager.NavigateTo($"/Settings/Users/{user.Id}/ChangePassword", true); } private async Task ManageRoles(User user) { var modalOptions = new ModalOptions() { Title = "Manage Roles", Maximizable = false, DefaultMaximized = false, Closable = true, Draggable = true, OkText = "Update Roles" }; var modalRef = await ModalService.CreateModalAsync(modalOptions, user.Id); modalRef.OnOk = async (Guid) => { await Table.ReloadAsync(); }; } }