154 lines
4.5 KiB
Text
154 lines
4.5 KiB
Text
@page "/Settings/Roles"
|
|
@using LANCommander.Server.Settings
|
|
@using Microsoft.Extensions.Options
|
|
@inject RoleService RoleService
|
|
@inject IOptions<Settings> Settings
|
|
@inject SettingsProvider<Settings> SettingsProvider
|
|
@inject IMessageService MessageService
|
|
@inject ILogger<Index> Logger
|
|
@attribute [Authorize(Roles = RoleService.AdministratorRoleName)]
|
|
|
|
<PageHeader Title="Roles" />
|
|
|
|
<DataTable
|
|
TItem="Role"
|
|
@ref="Table"
|
|
Size="TableSize.Small"
|
|
@bind-Total="Total"
|
|
Responsive
|
|
ColumnPicker
|
|
Searchable
|
|
SearchProperty="r => r.Name">
|
|
<Columns>
|
|
<BoundDataColumn Title="Name" Property="r => r.Name" Sortable DefaultSortOrder="SortDirection.Ascending" />
|
|
|
|
<DataActions TData="string">
|
|
<a href="/Settings/Roles/@(context.Id)" class="ant-btn ant-btn-primary">Edit</a>
|
|
|
|
@if (context.Name != RoleService.AdministratorRoleName)
|
|
{
|
|
<Popconfirm OnConfirm="() => DeleteRole(context)" Title="Are you sure you want to delete this role?">
|
|
<Button Icon="@IconType.Outline.Close" Type="@ButtonType.Text" Danger />
|
|
</Popconfirm>
|
|
}
|
|
else
|
|
{
|
|
<Tooltip Title="The administrator role cannot be deleted.">
|
|
<Button Icon="@IconType.Outline.Close" Type="@ButtonType.Text" Disabled />
|
|
</Tooltip>
|
|
}
|
|
</DataActions>
|
|
</Columns>
|
|
<RightToolbar>
|
|
<Flex Justify="FlexJustify.End" Align="FlexAlign.Center" Gap="FlexGap.Small">
|
|
<span style="white-space: nowrap;">Default Role:</span>
|
|
<Select
|
|
TItem="Role"
|
|
TItemValue="Guid"
|
|
DataSource="Roles"
|
|
OnSelectedItemChanged="DefaultRoleChanged"
|
|
LabelName="Name"
|
|
ValueName="Id"
|
|
DefaultActiveFirstOption="false"
|
|
@bind-Value="_defaultRoleId"
|
|
Disabled="Loading"
|
|
Style="min-width: 100px;"></Select>
|
|
<Button OnClick="() => ShowNewRoleDialog()" Type="@ButtonType.Primary">Add Role</Button>
|
|
</Flex>
|
|
</RightToolbar>
|
|
</DataTable>
|
|
|
|
<Modal Title="Add a Role" @bind-Visible="AddRoleDialogVisible" OnOk="AddRole" OnCancel="() => AddRoleDialogVisible = false">
|
|
<Form Model="NewRole">
|
|
<FormItem Label="Name">
|
|
<Input @bind-Value="@context.Name" />
|
|
</FormItem>
|
|
</Form>
|
|
</Modal>
|
|
|
|
@code {
|
|
bool Loading = true;
|
|
bool AddRoleDialogVisible = false;
|
|
|
|
Guid _defaultRoleId;
|
|
|
|
IEnumerable<Role> Roles { get; set; } = new List<Role>();
|
|
Role NewRole { get; set; } = new();
|
|
|
|
DataTable<Role> Table;
|
|
int Total;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_defaultRoleId = Settings.Value.Server.Roles.DefaultRoleId;
|
|
|
|
Roles = await RoleService.AsNoTracking().SortBy(r => r.Name).GetAsync();
|
|
|
|
Loading = false;
|
|
}
|
|
|
|
async Task DeleteRole(Role role)
|
|
{
|
|
role = await RoleService.FirstOrDefaultAsync(r => r.Name == role.Name);
|
|
|
|
if (role.Name == RoleService.AdministratorRoleName)
|
|
{
|
|
MessageService.Error("Cannot delete the administrator role!");
|
|
}
|
|
else
|
|
{
|
|
await RoleService.DeleteAsync(role);
|
|
|
|
await Table.ReloadAsync();
|
|
|
|
MessageService.Success($"Deleted {role.Name}!");
|
|
}
|
|
}
|
|
|
|
void ShowNewRoleDialog()
|
|
{
|
|
AddRoleDialogVisible = true;
|
|
}
|
|
|
|
async Task AddRole()
|
|
{
|
|
if ((await RoleService.ExistsAsync(r => r.Name == NewRole.Name)))
|
|
{
|
|
MessageService.Error("A role with that name already exists!");
|
|
|
|
AddRoleDialogVisible = false;
|
|
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
await RoleService.AddAsync(new Role
|
|
{
|
|
Name = NewRole.Name
|
|
});
|
|
|
|
await Table.ReloadAsync();
|
|
|
|
MessageService.Success("Role added!");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageService.Error("Could not add role!");
|
|
Logger.LogError(ex, "Could not add role!");
|
|
}
|
|
}
|
|
|
|
async Task DefaultRoleChanged(Role defaultRole)
|
|
{
|
|
if (defaultRole != null && !Loading && defaultRole.Id != Settings.Value.Server.Roles.DefaultRoleId)
|
|
{
|
|
SettingsProvider.Update(s =>
|
|
{
|
|
s.Server.Roles.DefaultRoleId = defaultRole.Id;
|
|
});
|
|
|
|
MessageService.Success($"Default role updated!");
|
|
}
|
|
}
|
|
}
|