@page "/Settings/Users"
@using LANCommander.Server.UI.Pages.Settings.Users.Components
@inject UserService UserService
@inject ModalService ModalService
@inject IMessageService MessageService
@inject NavigationManager NavigationManager
@attribute [Authorize(Roles = RoleService.AdministratorRoleName)]
@foreach (var role in context.Roles)
{
@role.Name
}
@if (Settings.Authentication.RequireApproval)
{
}
Edit
@code {
ICollection UserList { get; set; } = new List();
Settings Settings = SettingService.GetSettings();
bool Loading = true;
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);
user.Approved = true;
await MessageService.SuccessAsync($"Approved {user.UserName}!");
}
}
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}!");
Table.Reload();
}
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);
Table.Reload();
}
}
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);
Table.Reload();
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) =>
{
Table.Reload();
};
}
}