diff --git a/CouchLog/Components/AdminSettings/Pages/UserManagement.razor b/CouchLog/Components/AdminSettings/Pages/UserManagement.razor index 930e403..18fa06d 100644 --- a/CouchLog/Components/AdminSettings/Pages/UserManagement.razor +++ b/CouchLog/Components/AdminSettings/Pages/UserManagement.razor @@ -1,7 +1,177 @@ @page "/AdminSettings/UserManagement" +@rendermode InteractiveServer -

UserManagement

+@using CouchLog.Data +@using Microsoft.AspNetCore.Identity +@using Microsoft.EntityFrameworkCore +@using Microsoft.AspNetCore.Components.QuickGrid + +@inject ApplicationDbContext CouchLogDB +@inject UserManager UserManager +@inject RoleManager RoleManager +@inject AuthenticationStateProvider AuthenticationStateProvider +@inject NavigationManager NavigationManager + +
+

UserManagement

+ + +
+ +
+ + + + + + + @if(context.UserId != currentUserId) + { + + } + + +
+ + + @code { + string newUsername = ""; + string newUserRoleId = ""; + List gridUsers = new(); + List roles = new(); + string? currentUserId; + + protected override async Task OnInitializedAsync() + { + var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); + currentUserId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value; + + var users = await CouchLogDB.Users.ToListAsync(); + roles = await CouchLogDB.Roles.ToListAsync(); + int index = 1; + + gridUsers.Clear(); + + foreach (var user in users) + { + var role = await UserManager.GetRolesAsync(user); + + gridUsers.Add(new UserGridItem + { + Index = index++, + UserId = user.Id, + UserName = user.UserName!, + Role = role.FirstOrDefault() ?? "-" + }); + } + } + + public class UserGridItem + { + public int Index { get; set; } + public string UserId { get; set; } = ""; + public string UserName { get; set; } = ""; + public string Role { get; set; } = ""; + } + + async Task DeleteUser(UserGridItem user) + { + if (user.UserId == currentUserId) + return; + + var identityUser = await UserManager.FindByIdAsync(user.UserId); + + if (identityUser is null) + return; + + var result = await UserManager.DeleteAsync(identityUser); + + if (result.Succeeded) + { + gridUsers.Remove(user); + StateHasChanged(); + } + else + { + // Optional: Fehler anzeigen + } + } + + private async Task CreateUserAsync() + { + // Validierung + if (string.IsNullOrWhiteSpace(newUsername) || string.IsNullOrWhiteSpace(newUserRoleId)) + { + // Fehlermeldung anzeigen oder abbrechen + Console.WriteLine("Bitte Benutzername und Rolle angeben."); + return; + } + + // Hier deine Logik zum Erstellen des Users + var roleIdToUse = newUserRoleId; + var usernameToUse = newUsername; + + ApplicationUser newUser = new ApplicationUser + { + UserName = newUsername, + EmailConfirmed = true + }; + + var result = await UserManager.CreateAsync(newUser, "NewPassword123!"); + + IdentityRole roleName = roles.FirstOrDefault(r => r.Id == newUserRoleId); + + if(result.Succeeded) + { + await UserManager.AddToRoleAsync(newUser, roleName.Name); + } + + // Modal schließen oder Formular zurücksetzen + newUsername = ""; + newUserRoleId = ""; + + NavigationManager.NavigateTo(NavigationManager.Uri, true); + } } diff --git a/CouchLog/Components/AdminSettings/Shared/AdminSettingsLayout.razor b/CouchLog/Components/AdminSettings/Shared/AdminSettingsLayout.razor index 626588c..339c95f 100644 --- a/CouchLog/Components/AdminSettings/Shared/AdminSettingsLayout.razor +++ b/CouchLog/Components/AdminSettings/Shared/AdminSettingsLayout.razor @@ -1,10 +1,10 @@ @inherits LayoutComponentBase @layout CouchLog.Components.Layout.MainLayout -

Manage your account

+

Manage CouchLog

-

Change your account settings

+


diff --git a/CouchLog/CouchLog.csproj b/CouchLog/CouchLog.csproj index 4b41fba..cddb734 100644 --- a/CouchLog/CouchLog.csproj +++ b/CouchLog/CouchLog.csproj @@ -58,21 +58,22 @@ - - - + + + + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all