Implemented new user editing including permission groups
This commit is contained in:
34
Moonlight/App/Models/Forms/UserEditDataModel.cs
Normal file
34
Moonlight/App/Models/Forms/UserEditDataModel.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Moonlight.App.Database.Entities;
|
||||
using Moonlight.App.Models.Misc;
|
||||
|
||||
namespace Moonlight.App.Models.Forms;
|
||||
|
||||
public class UserEditDataModel
|
||||
{
|
||||
[Required]
|
||||
public string FirstName { get; set; } = "";
|
||||
|
||||
[Required]
|
||||
public string LastName { get; set; } = "";
|
||||
|
||||
[Required]
|
||||
public string Email { get; set; } = "";
|
||||
|
||||
[Required]
|
||||
public string Address { get; set; } = "";
|
||||
|
||||
[Required]
|
||||
public string City { get; set; } = "";
|
||||
|
||||
[Required]
|
||||
public string State { get; set; } = "";
|
||||
|
||||
[Required]
|
||||
public string Country { get; set; } = "";
|
||||
|
||||
public bool Admin { get; set; }
|
||||
public bool TotpEnabled { get; set; }
|
||||
public ulong DiscordId { get; set; }
|
||||
public PermissionGroup? PermissionGroup { get; set; }
|
||||
}
|
||||
@@ -1,12 +1,15 @@
|
||||
@page "/admin/users/edit/{Id:int}"
|
||||
@using Moonlight.App.Repositories
|
||||
@using Moonlight.App.Database.Entities
|
||||
@using Moonlight.App.Models.Forms
|
||||
@using Moonlight.App.Models.Misc
|
||||
@using Moonlight.App.Services
|
||||
@using Moonlight.App.Services.Interop
|
||||
@using Moonlight.App.Services.Sessions
|
||||
@using Mappy.Net
|
||||
|
||||
@inject Repository<User> UserRepository
|
||||
@inject Repository<PermissionGroup> PermissionGroupRepository
|
||||
@inject UserService UserService
|
||||
@inject SessionServerService SessionServerService
|
||||
@inject ToastService ToastService
|
||||
@@ -33,6 +36,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<SmartForm Model="Model" OnValidSubmit="Update">
|
||||
<div class="mt-5 row">
|
||||
<div class="col-xl-6 mb-5 mb-xl-10">
|
||||
<div class="card card-body p-10">
|
||||
@@ -40,19 +44,19 @@
|
||||
<label class="form-label">
|
||||
<TL>First name</TL>
|
||||
</label>
|
||||
<input @bind="User.FirstName" type="text" class="form-control">
|
||||
<InputText @bind-Value="Model.FirstName" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<label class="form-label">
|
||||
<TL>Last name</TL>
|
||||
</label>
|
||||
<input @bind="User.LastName" type="text" class="form-control">
|
||||
<InputText @bind-Value="Model.LastName" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<label class="form-label">
|
||||
<TL>Email</TL>
|
||||
</label>
|
||||
<input @bind="User.Email" type="email" class="form-control">
|
||||
<InputText @bind-Value="Model.Email" type="email" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-5 card card-body p-10">
|
||||
@@ -87,6 +91,16 @@
|
||||
</WButton>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-5 card card-body p-10">
|
||||
<div class="input-group">
|
||||
<SmartDropdown T="PermissionGroup"
|
||||
@bind-Value="Model.PermissionGroup"
|
||||
Items="PermissionGroups"
|
||||
DisplayFunc="@(x => x.Name)"
|
||||
SearchProp="@(x => x.Name)">
|
||||
</SmartDropdown>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-5 card card-body p-10">
|
||||
<div class="d-flex justify-content-end">
|
||||
<a href="/admin/users" class="btn btn-danger me-3">
|
||||
@@ -96,11 +110,9 @@
|
||||
CssClasses="btn-primary me-3"
|
||||
OnClick="EditPermissions">
|
||||
</WButton>
|
||||
<WButton Text="@(SmartTranslateService.Translate("Update"))"
|
||||
WorkingText="@(SmartTranslateService.Translate("Updating"))"
|
||||
CssClasses="btn-success"
|
||||
OnClick="Update">
|
||||
</WButton>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<TL>Update</TL>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -110,34 +122,34 @@
|
||||
<label class="form-label">
|
||||
<TL>Address</TL>
|
||||
</label>
|
||||
<input @bind="User.Address" type="text" class="form-control">
|
||||
<InputText @bind-Value="Model.Address" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<label class="form-label">
|
||||
<TL>City</TL>
|
||||
</label>
|
||||
<input @bind="User.City" type="text" class="form-control">
|
||||
<InputText @bind-Value="Model.City" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<label class="form-label">
|
||||
<TL>State</TL>
|
||||
</label>
|
||||
<input @bind="User.State" type="text" class="form-control">
|
||||
<InputText @bind-Value="Model.State" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<label class="form-label">
|
||||
<TL>Country</TL>
|
||||
</label>
|
||||
<input @bind="User.Country" type="text" class="form-control">
|
||||
<InputText @bind-Value="Model.Country" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<input @bind="User.TotpEnabled" type="checkbox" class="form-check-input">
|
||||
<input @bind="Model.TotpEnabled" type="checkbox" class="form-check-input">
|
||||
<label class="form-label">
|
||||
<TL>Totp</TL>
|
||||
</label>
|
||||
</div>
|
||||
<div class="mb-10">
|
||||
<input @bind="User.Admin" type="checkbox" class="form-check-input">
|
||||
<input @bind="Model.Admin" type="checkbox" class="form-check-input">
|
||||
<label class="form-label">
|
||||
<TL>Admin</TL>
|
||||
</label>
|
||||
@@ -148,15 +160,17 @@
|
||||
<label class="form-label">
|
||||
<TL>Discord id</TL>
|
||||
</label>
|
||||
<input @bind="User.DiscordId" type="number" class="form-control">
|
||||
|
||||
<input @bind="Model.DiscordId" type="number" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</SmartForm>
|
||||
}
|
||||
|
||||
<PermissionEditor @ref="PermissionEditor" OnSave="SavePermissions" />
|
||||
</LazyLoader>
|
||||
<PermissionEditor @ref="PermissionEditor" OnSave="SavePermissions"/>
|
||||
</LazyLoader>
|
||||
|
||||
@code
|
||||
{
|
||||
@@ -164,14 +178,25 @@
|
||||
public int Id { get; set; }
|
||||
|
||||
private User? User;
|
||||
private UserEditDataModel Model { get; set; } = new();
|
||||
private string NewPassword = "";
|
||||
|
||||
private PermissionGroup[] PermissionGroups;
|
||||
|
||||
private PermissionEditor PermissionEditor;
|
||||
|
||||
private Task Load(LazyLoader arg)
|
||||
{
|
||||
User = UserRepository.Get().FirstOrDefault(x => x.Id == Id);
|
||||
|
||||
if (User != null)
|
||||
{
|
||||
Model = Mapper.Map<UserEditDataModel>(User);
|
||||
PermissionGroups = PermissionGroupRepository
|
||||
.Get()
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -188,6 +213,7 @@
|
||||
|
||||
private async Task Update()
|
||||
{
|
||||
User = Mapper.Map(User, Model);
|
||||
UserRepository.Update(User!);
|
||||
|
||||
await ToastService.Success(SmartTranslateService.Translate("Successfully updated user"));
|
||||
|
||||
@@ -101,9 +101,7 @@
|
||||
<div class="flex-lg-row-fluid ms-lg-15">
|
||||
<div class="card mb-3">
|
||||
<div class="card-header border-0">
|
||||
<span class="card-title">
|
||||
<TL>Services</TL>
|
||||
</span>
|
||||
<span class="card-title"></span>
|
||||
<div class="card-toolbar">
|
||||
<a href="/admin/users/edit/@(User.Id)" class="btn btn-primary">
|
||||
<TL>Edit</TL>
|
||||
|
||||
Reference in New Issue
Block a user