From 6ee6c011e3cb5e598ab4b0011aa20bb476c634c1 Mon Sep 17 00:00:00 2001 From: Thomasr Date: Mon, 26 May 2025 12:56:54 -0400 Subject: [PATCH 1/2] Only one super admin should exists --- .../domain/user/service/UserServiceImpl.java | 5 +++++ .../runner/migrations/DatabaseChangelog.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java index 8da89a8476..1a8dcf566e 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java @@ -183,6 +183,11 @@ public Mono createNewUserByAuthUser(AuthUser authUser, boolean isSuperAdmi newUser.setConnections(connections); newUser.setActiveAuthId(connection.getAuthId()); newUser.setIsNewUser(true); + if(isSuperAdmin) { + return repository.findBySuperAdminIsTrue() + .flatMap(user -> update(user.getId(), newUser)) + .switchIfEmpty(create(newUser)); + } return create(newUser); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java index 20611b8d8a..e94be15664 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java @@ -479,6 +479,24 @@ public void renameApplicationRecordCollection(MongockTemplate mongoTemplate, Mon } + @ChangeSet(order = "031", id = "delete-old-super-admin", author = "Thomas") + public void deleteOldSuperAdmin(MongockTemplate mongoTemplate, MongoDatabase mongoDatabase) { + List users = mongoTemplate.find( + Query.query(Criteria.where("superAdmin").is(true)) + .with(Sort.by(Sort.Direction.DESC, "createdAt")), + User.class + ); + + // Ensure there's more than one superAdmin user + if (users.size() > 1) { + // Keep the most recent one (first in the sorted list), delete the rest + List usersToDelete = users.subList(1, users.size()); + for (User user : usersToDelete) { + mongoTemplate.remove(user); + } + } + } + private void addGidField(MongockTemplate mongoTemplate, String collectionName) { // Create a query to match all documents Query query = new Query(); From 5b881e68ebe7de1034ea3c331d85e9b487ebd951 Mon Sep 17 00:00:00 2001 From: dragonpoo <72492398+dragonpoo@users.noreply.github.com> Date: Mon, 26 May 2025 13:18:26 -0400 Subject: [PATCH 2/2] Update server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../lowcoder/runner/migrations/DatabaseChangelog.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java index e94be15664..d19cb0b3e4 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java @@ -490,10 +490,13 @@ public void deleteOldSuperAdmin(MongockTemplate mongoTemplate, MongoDatabase mon // Ensure there's more than one superAdmin user if (users.size() > 1) { // Keep the most recent one (first in the sorted list), delete the rest - List usersToDelete = users.subList(1, users.size()); - for (User user : usersToDelete) { - mongoTemplate.remove(user); - } + List userIdsToDelete = users.subList(1, users.size()) + .stream() + .map(User::getId) + .collect(Collectors.toList()); + + Query deleteQuery = Query.query(Criteria.where("_id").in(userIdsToDelete)); + mongoTemplate.remove(deleteQuery, User.class); } }