From 84fe61b3e0c3875f7b013f328daf8a579a7c6be3 Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Wed, 1 Apr 2026 11:09:50 +0200 Subject: [PATCH] fix: allow all role changes on SyncUser and UpdateUser callback Entire-Checkpoint: 496bace0120e --- internal/repository/user.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/internal/repository/user.go b/internal/repository/user.go index 307916eb..a341e5be 100644 --- a/internal/repository/user.go +++ b/internal/repository/user.go @@ -14,6 +14,7 @@ import ( "path/filepath" "reflect" "runtime" + "sort" "strings" "sync" @@ -210,6 +211,12 @@ func (r *UserRepository) AddUserIfNotExists(user *schema.User) error { return err } +func sortedRoles(roles []string) []string { + cp := append([]string{}, roles...) + sort.Strings(cp) + return cp +} + func (r *UserRepository) UpdateUser(dbUser *schema.User, user *schema.User) error { // user contains updated info -> Apply to dbUser // --- Simple Name Update --- @@ -279,6 +286,15 @@ func (r *UserRepository) UpdateUser(dbUser *schema.User, user *schema.User) erro } } + // --- Fallback: sync any remaining role differences not covered above --- + // This handles admin role assignment/removal and any other combinations that + // the specific branches above do not cover (e.g. user→admin, admin→user). + if !reflect.DeepEqual(sortedRoles(dbUser.Roles), sortedRoles(user.Roles)) { + if err := updateRoles(user.Roles); err != nil { + return err + } + } + return nil }