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..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 @@ -479,6 +479,27 @@ 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 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); + } + } + private void addGidField(MongockTemplate mongoTemplate, String collectionName) { // Create a query to match all documents Query query = new Query();