Skip to content

Commit 8a66735

Browse files
committed
Moved to aliases
1 parent 1000a5d commit 8a66735

File tree

4 files changed

+40
-22
lines changed

4 files changed

+40
-22
lines changed

api/src/main/java/io/kafbat/ui/model/rbac/Resource.java

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@
1212
import io.kafbat.ui.model.rbac.permission.SchemaAction;
1313
import io.kafbat.ui.model.rbac.permission.TopicAction;
1414
import jakarta.annotation.Nullable;
15+
import java.util.ArrayList;
16+
import java.util.Arrays;
17+
import java.util.Collection;
1518
import java.util.List;
1619
import java.util.Map;
20+
import java.util.Optional;
21+
import java.util.stream.Collectors;
1722
import java.util.stream.Stream;
1823
import org.apache.commons.lang3.EnumUtils;
1924

@@ -29,7 +34,7 @@ public enum Resource {
2934

3035
SCHEMA(SchemaAction.values()),
3136

32-
CONNECT(ConnectAction.values()),
37+
CONNECT(ConnectAction.values(), ConnectAction.ALIASES),
3338

3439
KSQL(KsqlAction.values()),
3540

@@ -39,18 +44,27 @@ public enum Resource {
3944

4045
CLIENT_QUOTAS(ClientQuotaAction.values());
4146

42-
private static final Map<PermissibleAction, PermissibleAction> DEPRECATED_ACTIONS = Map.of(
43-
ConnectAction.RESTART, ConnectAction.OPERATE
44-
);
4547

46-
private final List<PermissibleAction> actions;
48+
private final Map<String, PermissibleAction> actions;
49+
private final Map<String, PermissibleAction> aliases;
50+
51+
Resource(PermissibleAction[] actions, Map<String, PermissibleAction> aliases) {
52+
this.actions = Arrays.stream(actions)
53+
.collect(
54+
Collectors.toMap(
55+
a -> a.name().toLowerCase(),
56+
a -> a
57+
)
58+
);
59+
this.aliases = aliases;
60+
}
4761

4862
Resource(PermissibleAction[] actions) {
49-
this.actions = List.of(actions);
63+
this(actions, Map.of());
5064
}
5165

5266
public List<PermissibleAction> allActions() {
53-
return actions;
67+
return new ArrayList<>(actions.values());
5468
}
5569

5670
@Nullable
@@ -59,18 +73,14 @@ public static Resource fromString(String name) {
5973
}
6074

6175
public List<PermissibleAction> parseActionsWithDependantsUnnest(List<String> actionsToParse) {
62-
return actionsToParse.stream()
63-
.map(toParse -> actions.stream()
64-
.filter(a -> toParse.equalsIgnoreCase(a.name()))
65-
.findFirst()
66-
.map(a -> DEPRECATED_ACTIONS.getOrDefault(a, a))
76+
return actionsToParse.stream().map(toParse ->
77+
Optional.ofNullable(actions.get(toParse.toLowerCase()))
78+
.or(() -> Optional.ofNullable(aliases.get(toParse.toLowerCase())))
6779
.orElseThrow(() -> new IllegalArgumentException(
6880
"'%s' actions not applicable for resource %s".formatted(toParse, name())))
69-
)
70-
// unnesting all dependant actions
71-
.flatMap(a -> Stream.concat(Stream.of(a), a.unnestAllDependants()))
72-
.distinct()
73-
.toList();
81+
).flatMap(a ->
82+
Stream.concat(Stream.of(a), a.unnestAllDependants())
83+
).distinct().toList();
7484
}
7585

7686
}

api/src/main/java/io/kafbat/ui/model/rbac/permission/ConnectAction.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.kafbat.ui.model.rbac.permission;
22

3+
import java.util.Map;
34
import java.util.Set;
45
import org.apache.commons.lang3.EnumUtils;
56
import org.jetbrains.annotations.Nullable;
@@ -12,7 +13,6 @@ public enum ConnectAction implements PermissibleAction {
1213
OPERATE(VIEW),
1314
DELETE(VIEW),
1415
RESET_OFFSETS(VIEW),
15-
RESTART(VIEW), // DEPREACTED
1616
;
1717

1818
private final ConnectAction[] dependantActions;
@@ -23,6 +23,8 @@ public enum ConnectAction implements PermissibleAction {
2323

2424
public static final Set<ConnectAction> ALTER_ACTIONS = Set.of(CREATE, EDIT, DELETE, OPERATE, RESET_OFFSETS);
2525

26+
public static final Map<String, PermissibleAction> ALIASES = Map.of("restart", OPERATE);
27+
2628
@Nullable
2729
public static ConnectAction fromString(String name) {
2830
return EnumUtils.getEnum(ConnectAction.class, name);

api/src/test/java/io/kafbat/ui/model/rbac/AccessContextTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,23 +100,29 @@ void deniesAccessForResourceWithoutNameIfUserHasAllNeededPermissions() {
100100
}
101101

102102
@Test
103-
void shouldNotContainDeprecatedActions() {
103+
void shouldMapActionAliases() {
104104
SingleResourceAccess sra =
105105
new SingleResourceAccess(Resource.CONNECT, List.of(ConnectAction.OPERATE));
106106

107107
var allowed = sra.isAccessible(
108108
List.of(
109-
permission(Resource.CONNECT, null, ConnectAction.RESTART)
109+
permission(Resource.CONNECT, null, List.of("restart"))
110110
)
111111
);
112112

113113
assertThat(allowed).isTrue();
114114
}
115115

116116
private Permission permission(Resource res, @Nullable String namePattern, PermissibleAction... actions) {
117+
return permission(
118+
res, namePattern, Stream.of(actions).map(PermissibleAction::name).toList()
119+
);
120+
}
121+
122+
private Permission permission(Resource res, @Nullable String namePattern, List<String> actions) {
117123
Permission p = new Permission();
118124
p.setResource(res.name());
119-
p.setActions(Stream.of(actions).map(PermissibleAction::name).toList());
125+
p.setActions(actions);
120126
p.setValue(namePattern);
121127
p.validate();
122128
p.transform();

api/src/test/java/io/kafbat/ui/model/rbac/PermissionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void transformSetsFullActionsListIfAllActionPassed() {
3434
p.transform();
3535

3636
assertThat(p.getParsedActions())
37-
.isEqualTo(List.of(TopicAction.values()));
37+
.containsExactlyInAnyOrder(TopicAction.values());
3838
}
3939

4040
@Test

0 commit comments

Comments
 (0)