Skip to content

Commit 4ae1da6

Browse files
HaaroleanDavid-DB88
andcommitted
RBAC: Fix KC restart permissions (#3891)
Co-authored-by: David Bejanyan <[email protected]> (cherry picked from commit 8a68ba0)
1 parent 3377289 commit 4ae1da6

File tree

5 files changed

+41
-30
lines changed

5 files changed

+41
-30
lines changed

kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KafkaConnectController.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.provectus.kafka.ui.controller;
22

3+
import static com.provectus.kafka.ui.model.ConnectorActionDTO.RESTART;
4+
import static com.provectus.kafka.ui.model.ConnectorActionDTO.RESTART_ALL_TASKS;
5+
import static com.provectus.kafka.ui.model.ConnectorActionDTO.RESTART_FAILED_TASKS;
6+
37
import com.provectus.kafka.ui.api.KafkaConnectApi;
48
import com.provectus.kafka.ui.model.ConnectDTO;
59
import com.provectus.kafka.ui.model.ConnectorActionDTO;
@@ -17,6 +21,7 @@
1721
import com.provectus.kafka.ui.service.rbac.AccessControlService;
1822
import java.util.Comparator;
1923
import java.util.Map;
24+
import java.util.Set;
2025
import javax.validation.Valid;
2126
import lombok.RequiredArgsConstructor;
2227
import lombok.extern.slf4j.Slf4j;
@@ -30,6 +35,8 @@
3035
@RequiredArgsConstructor
3136
@Slf4j
3237
public class KafkaConnectController extends AbstractController implements KafkaConnectApi {
38+
private static final Set<ConnectorActionDTO> RESTART_ACTIONS
39+
= Set.of(RESTART, RESTART_FAILED_TASKS, RESTART_ALL_TASKS);
3340
private final KafkaConnectService kafkaConnectService;
3441
private final AccessControlService accessControlService;
3542

@@ -172,10 +179,17 @@ public Mono<ResponseEntity<Void>> updateConnectorState(String clusterName, Strin
172179
ConnectorActionDTO action,
173180
ServerWebExchange exchange) {
174181

182+
ConnectAction[] connectActions;
183+
if (RESTART_ACTIONS.contains(action)) {
184+
connectActions = new ConnectAction[] {ConnectAction.VIEW, ConnectAction.RESTART};
185+
} else {
186+
connectActions = new ConnectAction[] {ConnectAction.VIEW, ConnectAction.EDIT};
187+
}
188+
175189
Mono<Void> validateAccess = accessControlService.validateAccess(AccessContext.builder()
176190
.cluster(clusterName)
177191
.connect(connectName)
178-
.connectActions(ConnectAction.VIEW, ConnectAction.EDIT)
192+
.connectActions(connectActions)
179193
.build());
180194

181195
return validateAccess.then(
@@ -253,16 +267,11 @@ private Comparator<FullConnectorInfoDTO> getConnectorsComparator(ConnectorColumn
253267
if (orderBy == null) {
254268
return defaultComparator;
255269
}
256-
switch (orderBy) {
257-
case CONNECT:
258-
return Comparator.comparing(FullConnectorInfoDTO::getConnect);
259-
case TYPE:
260-
return Comparator.comparing(FullConnectorInfoDTO::getType);
261-
case STATUS:
262-
return Comparator.comparing(fullConnectorInfoDTO -> fullConnectorInfoDTO.getStatus().getState());
263-
case NAME:
264-
default:
265-
return defaultComparator;
266-
}
270+
return switch (orderBy) {
271+
case CONNECT -> Comparator.comparing(FullConnectorInfoDTO::getConnect);
272+
case TYPE -> Comparator.comparing(FullConnectorInfoDTO::getType);
273+
case STATUS -> Comparator.comparing(fullConnectorInfoDTO -> fullConnectorInfoDTO.getStatus().getState());
274+
default -> defaultComparator;
275+
};
267276
}
268277
}

kafka-ui-react-app/src/components/Connect/Details/Actions/Actions.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ const Actions: React.FC = () => {
102102
disabled={isMutating}
103103
permission={{
104104
resource: ResourceType.CONNECT,
105-
action: Action.EDIT,
105+
action: Action.RESTART,
106106
value: routerProps.connectorName,
107107
}}
108108
>
@@ -113,7 +113,7 @@ const Actions: React.FC = () => {
113113
disabled={isMutating}
114114
permission={{
115115
resource: ResourceType.CONNECT,
116-
action: Action.EDIT,
116+
action: Action.RESTART,
117117
value: routerProps.connectorName,
118118
}}
119119
>
@@ -124,7 +124,7 @@ const Actions: React.FC = () => {
124124
disabled={isMutating}
125125
permission={{
126126
resource: ResourceType.CONNECT,
127-
action: Action.EDIT,
127+
action: Action.RESTART,
128128
value: routerProps.connectorName,
129129
}}
130130
>

kafka-ui-react-app/src/components/Connect/Details/Tasks/ActionsCellTasks.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import React from 'react';
2-
import { Task } from 'generated-sources';
2+
import { Action, ResourceType, Task } from 'generated-sources';
33
import { CellContext } from '@tanstack/react-table';
44
import useAppParams from 'lib/hooks/useAppParams';
55
import { useRestartConnectorTask } from 'lib/hooks/api/kafkaConnect';
6-
import { Dropdown, DropdownItem } from 'components/common/Dropdown';
6+
import { Dropdown } from 'components/common/Dropdown';
7+
import { ActionDropdownItem } from 'components/common/ActionComponent';
78
import { RouterParamsClusterConnectConnector } from 'lib/paths';
89

910
const ActionsCellTasks: React.FC<CellContext<Task, unknown>> = ({ row }) => {
@@ -18,13 +19,18 @@ const ActionsCellTasks: React.FC<CellContext<Task, unknown>> = ({ row }) => {
1819

1920
return (
2021
<Dropdown>
21-
<DropdownItem
22+
<ActionDropdownItem
2223
onClick={() => restartTaskHandler(id?.task)}
2324
danger
2425
confirm="Are you sure you want to restart the task?"
26+
permission={{
27+
resource: ResourceType.CONNECT,
28+
action: Action.RESTART,
29+
value: routerProps.connectorName,
30+
}}
2531
>
2632
<span>Restart task</span>
27-
</DropdownItem>
33+
</ActionDropdownItem>
2834
</Dropdown>
2935
);
3036
};

kafka-ui-react-app/src/components/Connect/List/ActionsCell.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ const ActionsCell: React.FC<CellContext<FullConnectorInfo, unknown>> = ({
7878
disabled={isMutating}
7979
permission={{
8080
resource: ResourceType.CONNECT,
81-
action: Action.EDIT,
81+
action: Action.RESTART,
8282
value: name,
8383
}}
8484
>
@@ -89,7 +89,7 @@ const ActionsCell: React.FC<CellContext<FullConnectorInfo, unknown>> = ({
8989
disabled={isMutating}
9090
permission={{
9191
resource: ResourceType.CONNECT,
92-
action: Action.EDIT,
92+
action: Action.RESTART,
9393
value: name,
9494
}}
9595
>
@@ -100,7 +100,7 @@ const ActionsCell: React.FC<CellContext<FullConnectorInfo, unknown>> = ({
100100
disabled={isMutating}
101101
permission={{
102102
resource: ResourceType.CONNECT,
103-
action: Action.EDIT,
103+
action: Action.RESTART,
104104
value: name,
105105
}}
106106
>

kafka-ui-react-app/src/components/Connect/New/New.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const New: React.FC = () => {
3838
const { clusterName } = useAppParams<ClusterNameRoute>();
3939
const navigate = useNavigate();
4040

41-
const { data: connects } = useConnects(clusterName);
41+
const { data: connects = [] } = useConnects(clusterName);
4242
const mutation = useCreateConnector(clusterName);
4343

4444
const methods = useForm<FormValues>({
@@ -88,10 +88,6 @@ const New: React.FC = () => {
8888
}
8989
};
9090

91-
if (!connects || connects.length === 0) {
92-
return null;
93-
}
94-
9591
const connectOptions = connects.map(({ name: connectName }) => ({
9692
value: connectName,
9793
label: connectName,
@@ -108,10 +104,10 @@ const New: React.FC = () => {
108104
onSubmit={handleSubmit(onSubmit)}
109105
aria-label="Create connect form"
110106
>
111-
<S.Filed $hidden={connects.length <= 1}>
107+
<S.Filed $hidden={connects?.length <= 1}>
112108
<Heading level={3}>Connect *</Heading>
113109
<Controller
114-
defaultValue={connectOptions[0].value}
110+
defaultValue={connectOptions[0]?.value}
115111
control={control}
116112
name="connectName"
117113
render={({ field: { name, onChange } }) => (
@@ -120,7 +116,7 @@ const New: React.FC = () => {
120116
name={name}
121117
disabled={isSubmitting}
122118
onChange={onChange}
123-
value={connectOptions[0].value}
119+
value={connectOptions[0]?.value}
124120
minWidth="100%"
125121
options={connectOptions}
126122
/>

0 commit comments

Comments
 (0)