Skip to content

Commit 0098c87

Browse files
authored
Merge pull request #863 from utmstack/bugfix/v10.5.10/system-requires-at-least-one-admin-user
fix: Add validation to prevent deletion of the last admin user
2 parents 0b92be6 + d9837b0 commit 0098c87

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

backend/src/main/java/com/park/utmstack/repository/UserRepository.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public interface UserRepository extends JpaRepository<User, Long> {
3939
List<User> findAllAdmins();
4040

4141
@Query("SELECT u FROM User u JOIN FETCH u.authorities a WHERE a.name = 'ROLE_ADMIN' AND u.activated = true")
42-
Optional<User> findAnyAdminUser();
42+
List<User> findAdminUsers();
4343

4444
@EntityGraph(attributePaths = "authorities")
4545
Optional<User> findOneWithAuthoritiesById(Long id);

backend/src/main/java/com/park/utmstack/security/internalApiKey/InternalApiKeyProvider.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.park.utmstack.security.internalApiKey;
22

3-
import com.park.utmstack.config.Constants;
43
import com.park.utmstack.repository.UserRepository;
54
import org.slf4j.Logger;
65
import org.slf4j.LoggerFactory;
@@ -26,8 +25,7 @@ public InternalApiKeyProvider(UserRepository userRepository) {
2625
public UsernamePasswordAuthenticationToken getAuthentication(String apiKey) {
2726
final String ctx = CLASSNAME + ".getAuthentication";
2827
try {
29-
com.park.utmstack.domain.User user = userRepository.findAnyAdminUser()
30-
.orElseThrow(() -> new RuntimeException("User not found"));
28+
com.park.utmstack.domain.User user = this.findFirstActiveAdmin();
3129
List<SimpleGrantedAuthority> authorities = user.getAuthorities().stream().map(d -> new SimpleGrantedAuthority(d.getName()))
3230
.collect(Collectors.toList());
3331
User principal = new User(user.getLogin(), "", authorities);
@@ -38,5 +36,15 @@ public UsernamePasswordAuthenticationToken getAuthentication(String apiKey) {
3836
throw new RuntimeException(msg);
3937
}
4038
}
39+
40+
private com.park.utmstack.domain.User findFirstActiveAdmin() throws Exception {
41+
List<com.park.utmstack.domain.User> users = userRepository.findAdminUsers();
42+
43+
if (!users.isEmpty()) {
44+
return users.get(0);
45+
} else {
46+
throw new Exception("No active admin user found");
47+
}
48+
}
4149
}
4250

version.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version: 10.5.11
1+
version: 10.5.12

0 commit comments

Comments
 (0)