@using LucideBlazor @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Moonlight.Frontend.UI.Admin.Modals @using Moonlight.Shared @using ShadcnBlazor.Buttons @using ShadcnBlazor.DataGrids @using ShadcnBlazor.Dropdowns @using ShadcnBlazor.Extras.AlertDialogs @using ShadcnBlazor.Extras.Toasts @using ShadcnBlazor.Tabels @using Moonlight.Shared.Http.Requests @using Moonlight.Shared.Http.Requests.Users @using Moonlight.Shared.Http.Responses @using Moonlight.Shared.Http.Responses.Users @using ShadcnBlazor.Extras.Dialogs @inject HttpClient HttpClient @inject AlertDialogService AlertDialogService @inject DialogService DialogService @inject ToastService ToastService @inject IAuthorizationService AuthorizationService

Users

Manage users registered in your instance
Logout Edit Delete
@code { [CascadingParameter] public Task AuthState { get; set; } private DataGrid Grid; private AuthorizationResult LogoutAccess; private AuthorizationResult EditAccess; private AuthorizationResult DeleteAccess; private AuthorizationResult CreateAccess; protected override async Task OnInitializedAsync() { var authState = await AuthState; LogoutAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Users.Logout); EditAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Users.Edit); DeleteAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Users.Delete); CreateAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Users.Create); } private async Task> LoadAsync(DataGridRequest request) { var query = $"?startIndex={request.StartIndex}&length={request.Length}"; var filterOptions = request.Filters.Count > 0 ? new FilterOptions(request.Filters) : null; var response = await HttpClient.GetFromJsonAsync>( $"api/admin/users{query}&filterOptions={filterOptions}", Constants.SerializerOptions ); return new DataGridResponse(response!.Data, response.TotalLength); } private async Task CreateAsync() { await DialogService.LaunchAsync(parameters => { parameters[nameof(CreateUserDialog.OnCompleted)] = async () => { await Grid.RefreshAsync(); }; }); } private async Task EditAsync(UserDto user) { await DialogService.LaunchAsync(parameters => { parameters[nameof(UpdateUserDialog.User)] = user; parameters[nameof(UpdateUserDialog.OnCompleted)] = async () => { await Grid.RefreshAsync(); }; }); } private async Task DeleteAsync(UserDto user) { await AlertDialogService.ConfirmDangerAsync( $"Deletion of user {user.Username}", "Do you really want to delete this user? This action cannot be undone", async () => { var response = await HttpClient.DeleteAsync($"api/admin/users/{user.Id}"); response.EnsureSuccessStatusCode(); await ToastService.SuccessAsync("User deletion", $"Successfully deleted user {user.Username}"); await Grid.RefreshAsync(); } ); } private async Task LogoutAsync(UserDto user) { await AlertDialogService.ConfirmDangerAsync( $"Logout all session of user {user.Username}", "Do you really want to logout all session of this user? This action cannot be undone", async () => { var response = await HttpClient.PostAsync($"api/admin/users/{user.Id}/logout", null); response.EnsureSuccessStatusCode(); await ToastService.SuccessAsync("User logout", $"Successfully logged out all session of user {user.Username}"); await Grid.RefreshAsync(); } ); } }