Просмотр исходного кода

block selfupdate of groups and network roles

abhishek9686 1 год назад
Родитель
Сommit
f7453f8cb6
1 измененных файлов с 15 добавлено и 0 удалено
  1. 15 0
      controllers/user.go

+ 15 - 0
controllers/user.go

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"net/http"
 	"net/url"
+	"reflect"
 
 	"github.com/gorilla/mux"
 	"github.com/gorilla/websocket"
@@ -519,6 +520,20 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 			return
 
 		}
+		// user cannot update his own roles and groups
+		if len(user.NetworkRoles) != len(userchange.NetworkRoles) || !reflect.DeepEqual(user.NetworkRoles, userchange.NetworkRoles) {
+			err = errors.New("user cannot update self update their network roles")
+			slog.Error("failed to update user", "caller", caller.UserName, "attempted to update user", username, "error", err)
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
+			return
+		}
+		// user cannot update his own roles and groups
+		if len(user.UserGroups) != len(userchange.UserGroups) || !reflect.DeepEqual(user.UserGroups, userchange.UserGroups) {
+			err = errors.New("user cannot update self update their groups")
+			slog.Error("failed to update user", "caller", caller.UserName, "attempted to update user", username, "error", err)
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
+			return
+		}
 	}
 	if ismaster {
 		if user.PlatformRoleID != models.SuperAdminRole && userchange.PlatformRoleID == models.SuperAdminRole {