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"
|
||||
"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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user