From 38ffe714a2e28c8def866243006ded3fe2efa13e Mon Sep 17 00:00:00 2001 From: Kawa Date: Thu, 11 Jun 2026 10:56:47 +0200 Subject: [PATCH] Restore clean role-change success message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the temporary "saved: …" diagnostic wording now that the production interactivity bug is fixed. Keeps the robust @onchange handler and the previous-role return value used in the audit entry. Co-Authored-By: Claude Opus 4.8 (1M context) --- Components/Pages/Admin/UserManagement.razor | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/Components/Pages/Admin/UserManagement.razor b/Components/Pages/Admin/UserManagement.razor index bed3d93..da66efa 100644 --- a/Components/Pages/Admin/UserManagement.razor +++ b/Components/Pages/Admin/UserManagement.razor @@ -195,24 +195,15 @@ else private async Task OnRoleChange(AppUser user, ChangeEventArgs e) { - // Surface every branch on-screen so a failed save is never silent. The "saved" value is - // re-read from the store, so it proves whether the write actually landed on disk. - var raw = e.Value?.ToString(); - if (!Enum.TryParse(raw, out var newRole)) - { - _message = string.Format(T["usermgmt.msg.error"], $"unrecognized role value '{raw}'"); - _isError = true; - return; - } + if (!Enum.TryParse(e.Value?.ToString(), out var newRole)) return; try { var oldRole = await UserService.UpdateRoleAsync(user.Id, newRole); user.Role = newRole; - var saved = (await UserService.GetByEmailAsync(user.Email))?.Role; await Audit.LogAsync("RoleChanged", "", Array.Empty(), $"Changed role for {user.Email} ({user.DisplayName}) from {oldRole} to {newRole}."); - _message = $"{string.Format(T["usermgmt.msg.roleupdated"], user.DisplayName)} ({oldRole} → {newRole}, saved: {saved})"; - _isError = saved != newRole; + _message = string.Format(T["usermgmt.msg.roleupdated"], user.DisplayName); + _isError = false; } catch (Exception ex) {