From 0e6115e4231fa6b36bfe8d51aa6f68bc1e1af5f8 Mon Sep 17 00:00:00 2001 From: Christophe Date: Wed, 15 Apr 2026 21:53:24 +0200 Subject: [PATCH] Ajoute une table de gestion des utilisateurs --- .../Models/Users/AdminCreateUserRequest.cs | 32 + ChessCubing.App/Pages/AdminPage.razor | 632 ++++++++++++++---- .../Admin/AdminUserContracts.cs | 40 ++ .../Auth/KeycloakAuthService.cs | 74 +- ChessCubing.Server/Program.cs | 122 ++++ .../Users/MySqlUserProfileStore.cs | 16 + README.md | 2 +- styles.css | 136 ++-- 8 files changed, 865 insertions(+), 189 deletions(-) create mode 100644 ChessCubing.App/Models/Users/AdminCreateUserRequest.cs diff --git a/ChessCubing.App/Models/Users/AdminCreateUserRequest.cs b/ChessCubing.App/Models/Users/AdminCreateUserRequest.cs new file mode 100644 index 0000000..4d31545 --- /dev/null +++ b/ChessCubing.App/Models/Users/AdminCreateUserRequest.cs @@ -0,0 +1,32 @@ +namespace ChessCubing.App.Models.Users; + +public sealed class AdminCreateUserRequest +{ + public string Username { get; set; } = string.Empty; + + public string? Email { get; set; } + + public string Password { get; set; } = string.Empty; + + public string ConfirmPassword { get; set; } = string.Empty; + + public string? FirstName { get; set; } + + public string? LastName { get; set; } + + public bool IsEnabled { get; set; } = true; + + public bool IsEmailVerified { get; set; } + + public string? DisplayName { get; set; } + + public string? Club { get; set; } + + public string? City { get; set; } + + public string? PreferredFormat { get; set; } + + public string? FavoriteCube { get; set; } + + public string? Bio { get; set; } +} diff --git a/ChessCubing.App/Pages/AdminPage.razor b/ChessCubing.App/Pages/AdminPage.razor index 4f2c840..ef075c6 100644 --- a/ChessCubing.App/Pages/AdminPage.razor +++ b/ChessCubing.App/Pages/AdminPage.razor @@ -18,10 +18,10 @@

Administration

-

Piloter les utilisateurs du site depuis l'interface

+

Gerer les utilisateurs avec une vue tableau

- Cette premiere zone d'administration centralise les comptes du site, - l'etat du compte Keycloak et les donnees metier stockees en MySQL. + Cette zone rassemble les comptes Keycloak et les profils du site + dans une interface plus classique, avec ajout, edition et suppression.

Voir l'espace utilisateur @@ -70,8 +70,8 @@

Connecte-toi avec un compte administrateur

- Utilise le menu du site pour te connecter. La zone d'administration - devient disponible des qu'un compte avec le role `admin` est actif. + La gestion des utilisateurs devient disponible des qu'un compte + portant le role `admin` est connecte.

@@ -105,29 +105,44 @@

Impossible de charger l'administration

@LoadError

- +
} else { -
+

Utilisateurs

-

Parcourir les comptes

+

Liste des comptes

+

+ Le tableau centralise les comptes du site avec une colonne d'actions + pour les operations courantes. +

-
+ @if (!string.IsNullOrWhiteSpace(SaveError)) + { +

@SaveError

+ } + + @if (!string.IsNullOrWhiteSpace(SaveMessage)) + { +

@SaveMessage

+ } + +
- +
+ + +
@if (FilteredUsers.Count == 0) @@ -139,34 +154,61 @@ } else { -
- @foreach (var user in FilteredUsers) - { - - } +
+ + + + + + + + + + + + + + @foreach (var user in FilteredUsers) + { + + + + + + + + + + } + +
UtilisateurEmailNom afficheEtatProfil siteDerniere mise a jourActions
+
+ @user.Username + @user.IdentityDisplayName +
+
@(user.Email ?? "Non renseigne")@(user.SiteDisplayName ?? "A definir") + + @(user.IsEnabled ? "Actif" : "Suspendu") + + + + @(user.HasSiteProfile ? "Cree" : "Absent") + + @BuildUserCardFootnote(user) +
+ + +
+
}
-
+
@if (IsLoadingDetail) {

Chargement

@@ -181,9 +223,11 @@ } else if (SelectedUser is null) { -

Selection

-

Choisis un utilisateur

-

La fiche detaillee apparait ici des qu'un compte est selectionne.

+

Edition

+

Choisis un utilisateur dans le tableau

+

+ Le bouton `Modifier` charge la fiche detaillee ici pour editer le compte et le profil du site. +

} else { @@ -193,7 +237,7 @@

@SelectedUser.DisplayName

- Les roles restent geres dans Keycloak. Cette page couvre l'etat du compte et le profil du site. + Les roles restent geres dans Keycloak. Cette fiche couvre l'etat du compte et le profil du site.

@@ -216,22 +260,12 @@ - @if (!string.IsNullOrWhiteSpace(SaveError)) - { -

@SaveError

- } - - @if (!string.IsNullOrWhiteSpace(SaveMessage)) - { -

@SaveMessage

- } - - +