mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-04-01 13:37:30 +02:00
fix: allow all role changes on SyncUser and UpdateUser callback
Entire-Checkpoint: 496bace0120e
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@@ -210,6 +211,12 @@ func (r *UserRepository) AddUserIfNotExists(user *schema.User) error {
|
|||||||
return err
|
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 {
|
func (r *UserRepository) UpdateUser(dbUser *schema.User, user *schema.User) error {
|
||||||
// user contains updated info -> Apply to dbUser
|
// user contains updated info -> Apply to dbUser
|
||||||
// --- Simple Name Update ---
|
// --- 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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user