fix(PROJ-72): Superadmin kann Passwort/Rolle von Superadmin-Peers nicht ändern

SEC-01 Privilegien-Check (roleLevel(target) >= roleLevel(sess)) blockte
Superadmin (höchstes Level) bei jedem Ziel-User mit gleichem Level -
inklusive anderer Superadmins. Passwort-Reset durch Superadmin schlug
dadurch fehl. Superadmin ist jetzt vom Peer-Level-Check ausgenommen,
da kein höheres Level existiert.
This commit is contained in:
sysops
2026-07-26 21:50:19 +02:00
parent 9db5eaa1e8
commit c580a7c05d
+4 -1
View File
@@ -155,7 +155,9 @@ func (s *Server) handleUpdateUser(w http.ResponseWriter, r *http.Request) {
// SEC-01: Privilege escalation check — caller must not assign a role
// at or above their own level, and must not modify users at or above
// their own level.
// their own level. Superadmin is the top level, so peer (same-level)
// checks would otherwise block superadmin-vs-superadmin management.
if sess.Role != userstore.RoleSuperAdmin {
if roleLevel(target.Role) >= roleLevel(sess.Role) {
writeError(w, http.StatusForbidden, "insufficient privileges to modify this user")
return
@@ -164,6 +166,7 @@ func (s *Server) handleUpdateUser(w http.ResponseWriter, r *http.Request) {
writeError(w, http.StatusForbidden, "insufficient privileges to assign this role")
return
}
}
updated, err := s.users.Update(id, userstore.UpdateUserRequest{
Email: req.Email,