forked from Sarah/Lieb-Website
133 lines
No EOL
4 KiB
Text
133 lines
No EOL
4 KiB
Text
@page "/useredit"
|
|
@page "/useredit/{_userId}"
|
|
@using Lieb.Data
|
|
@using Lieb.Models
|
|
@using Lieb.Models.GuildWars2
|
|
@using System.ComponentModel.DataAnnotations
|
|
@using System.Security.Claims
|
|
@inject UserService UserService
|
|
@inject NavigationManager NavigationManager
|
|
@inject AuthenticationStateProvider AuthenticationStateProvider
|
|
@inject IJSRuntime JsRuntime
|
|
|
|
<h3>User Edit</h3>
|
|
|
|
<EditForm Model="@_user" OnValidSubmit="@HandleValidSubmit">
|
|
<DataAnnotationsValidator />
|
|
<ValidationSummary />
|
|
|
|
|
|
<AuthorizeView Policy="@Constants.Roles.Admin.Name" Context="authorizationContext">
|
|
<Authorized>
|
|
<p>@_submitMessage</p>
|
|
<p>
|
|
<label>
|
|
Banned Until:
|
|
<InputDate @bind-Value="_user.BannedUntil" />
|
|
</label>
|
|
@if (_user.BannedUntil >= DateTime.Now.Date)
|
|
{
|
|
<button type="submit">Ban</button>
|
|
}
|
|
else
|
|
{
|
|
<button type="submit">Unban</button>
|
|
}
|
|
</p>
|
|
</Authorized>
|
|
</AuthorizeView>
|
|
|
|
</EditForm>
|
|
|
|
|
|
<table>
|
|
<tr>
|
|
<th></th>
|
|
<th>Role</th>
|
|
<th>Type</th>
|
|
</tr>
|
|
@foreach (LiebRole role in _roles)
|
|
{
|
|
<tr>
|
|
@{
|
|
bool hasRole = _user.RoleAssignments.Where(a => a.LiebRoleId == role.LiebRoleId).Any();
|
|
bool disabled = _editingUserRights < role.LevelToAssign || role.Type == RoleType.GuildRole;
|
|
}
|
|
<td><input type="checkbox" disabled="@disabled" checked="@hasRole" @onchange="args => RoleStatusChanged(role, args)" /></td>
|
|
<td>@role.RoleName</td>
|
|
<td>@role.Type.ToString()</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
hi
|
|
<br />
|
|
|
|
@code {
|
|
|
|
[Parameter]
|
|
public string _userId { get; set; }
|
|
|
|
private LiebUser _user;
|
|
private int _editingUserRights = 0;
|
|
private List<LiebRole> _roles;
|
|
private string _submitMessage = string.Empty;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
|
ulong discordId = ulong.Parse(authState.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value);
|
|
LiebUser editingUser = UserService.GetLiebUser(discordId);
|
|
|
|
foreach(RoleAssignment assignment in editingUser.RoleAssignments)
|
|
{
|
|
if(_editingUserRights < assignment.LiebRole.Level)
|
|
{
|
|
_editingUserRights = assignment.LiebRole.Level;
|
|
}
|
|
}
|
|
|
|
if(!string.IsNullOrEmpty(_userId) && ulong.TryParse(_userId, out ulong parsedId))
|
|
{
|
|
_user = UserService.GetLiebUser(parsedId);
|
|
_roles = UserService.GetLiebRoles();
|
|
}
|
|
else
|
|
{
|
|
NavigationManager.NavigateTo("useroverview");
|
|
}
|
|
}
|
|
|
|
async Task RoleStatusChanged(LiebRole role, ChangeEventArgs args)
|
|
{
|
|
bool isChecked = bool.Parse(args.Value.ToString());
|
|
RoleAssignment? assignment = _user.RoleAssignments.FirstOrDefault(a => a.LiebRoleId == role.LiebRoleId);
|
|
if(isChecked && assignment == null)
|
|
{
|
|
RoleAssignment roleAssignment = new RoleAssignment()
|
|
{
|
|
LiebRoleId = role.LiebRoleId,
|
|
LiebUserId = _user.Id
|
|
};
|
|
await UserService.AddRoleToUser(_user.Id, role.LiebRoleId);
|
|
_user.RoleAssignments.Add(roleAssignment);
|
|
}
|
|
else if(!isChecked && assignment != null)
|
|
{
|
|
await UserService.RemoveRoleFromUser(_user.Id, role.LiebRoleId);
|
|
_user.RoleAssignments.Remove(assignment);
|
|
}
|
|
}
|
|
|
|
private async Task HandleValidSubmit()
|
|
{
|
|
await UserService.UpdateBannedUntil(_user.Id, _user.BannedUntil);
|
|
if(_user.BannedUntil >= DateTime.Now.Date)
|
|
{
|
|
_submitMessage = "user banned successfully";
|
|
}
|
|
else
|
|
{
|
|
_submitMessage = "user unbanned successfully";
|
|
}
|
|
}
|
|
} |