Skip to content

Commit dff1ee1

Browse files
committed
BE: RBAC: Support provider for basic auth
create basic auth extractor
1 parent 4a8fa5a commit dff1ee1

File tree

5 files changed

+32
-16
lines changed

5 files changed

+32
-16
lines changed

api/src/main/java/io/kafbat/ui/config/auth/BasicAuthSecurityConfig.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package io.kafbat.ui.config.auth;
22

3-
import io.kafbat.ui.model.rbac.Role;
4-
import io.kafbat.ui.model.rbac.provider.Provider;
53
import io.kafbat.ui.service.rbac.AccessControlService;
4+
import io.kafbat.ui.service.rbac.extractor.RbacBasicAuthAuthoritiesExtractor;
65
import io.kafbat.ui.util.StaticFileWebFilter;
7-
import java.util.Collection;
86
import java.util.regex.Pattern;
9-
import java.util.stream.Collectors;
107
import lombok.extern.slf4j.Slf4j;
118
import org.springframework.beans.factory.ObjectProvider;
129
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -71,16 +68,9 @@ public ReactiveUserDetailsService reactiveUserDetailsService(SecurityProperties
7168
.roles(StringUtils.toStringArray(user.getRoles()))
7269
.build();
7370

74-
Collection<String> groups = accessControlService.getRoles().stream()
75-
.filter(role -> role.getSubjects().stream()
76-
.filter(subj -> Provider.BASIC_AUTH.equals(subj.getProvider()))
77-
.filter(subj -> "user".equals(subj.getType()))
78-
.anyMatch(subj -> user.getName().equals(subj.getValue()))
79-
)
80-
.map(Role::getName)
81-
.collect(Collectors.toSet());
71+
RbacBasicAuthAuthoritiesExtractor extractor = new RbacBasicAuthAuthoritiesExtractor(accessControlService);
8272

83-
return new RbacUserDetailsService(new RbacBasicAuthUser(userDetails, groups));
73+
return new RbacUserDetailsService(new RbacBasicAuthUser(userDetails, extractor.groups(user.getName())));
8474
}
8575

8676
private String password(String password, PasswordEncoder encoder) {

api/src/main/java/io/kafbat/ui/model/rbac/provider/Provider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public enum Provider {
1515
LDAP,
1616
LDAP_AD,
1717

18-
BASIC_AUTH;
18+
LOGIN_FORM;
1919

2020
@Nullable
2121
public static Provider fromString(String name) {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.kafbat.ui.service.rbac.extractor;
2+
3+
import io.kafbat.ui.model.rbac.Role;
4+
import io.kafbat.ui.model.rbac.provider.Provider;
5+
import io.kafbat.ui.service.rbac.AccessControlService;
6+
import java.util.Collection;
7+
import java.util.stream.Collectors;
8+
9+
public class RbacBasicAuthAuthoritiesExtractor {
10+
private final AccessControlService accessControlService;
11+
12+
public RbacBasicAuthAuthoritiesExtractor(AccessControlService accessControlService) {
13+
this.accessControlService = accessControlService;
14+
}
15+
16+
public Collection<String> groups(String username) {
17+
return accessControlService.getRoles().stream()
18+
.filter(role -> role.getSubjects().stream()
19+
.filter(subj -> Provider.LOGIN_FORM.equals(subj.getProvider()))
20+
.filter(subj -> "user".equals(subj.getType()))
21+
.anyMatch(subj -> username.equals(subj.getValue()))
22+
)
23+
.map(Role::getName)
24+
.collect(Collectors.toSet());
25+
}
26+
}

api/src/test/java/io/kafbat/ui/BasicAuthIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import org.springframework.test.web.reactive.server.WebTestClient;
2222

2323
@SpringBootTest
24-
@ActiveProfiles("rbac-basic-auth")
24+
@ActiveProfiles("rbac-login-form")
2525
@AutoConfigureWebTestClient(timeout = "60000")
2626
public class BasicAuthIntegrationTest {
2727
@Autowired

api/src/test/resources/application-rbac-basic-auth.yml renamed to api/src/test/resources/application-rbac-login-form.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ rbac:
1313
clusters:
1414
- local
1515
subjects:
16-
- provider: basic_auth
16+
- provider: login_form
1717
type: user
1818
value: admin
1919
permissions:

0 commit comments

Comments
 (0)