Skip to content

Commit 5493eb7

Browse files
authored
Merge pull request #38 from CryptoRodeo/kfluxui-188
fix(KFLUXUI-188): disable pipeline actions for contributors
2 parents 04ab3eb + d46d8c3 commit 5493eb7

File tree

5 files changed

+25
-17
lines changed

5 files changed

+25
-17
lines changed

src/components/ApplicationDetails/ApplicationDetails.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { TrackEvents, useTrackEvent } from '../../utils/analytics';
99
import { useApplicationBreadcrumbs } from '../../utils/breadcrumb-utils';
1010
import { useAccessReviewForModel } from '../../utils/rbac';
1111
import { useComponentRelationAction } from '../ComponentRelation/useComponentRelationAction';
12+
import { createCustomizeAllPipelinesModalLauncher } from '../CustomizedPipeline/CustomizePipelinesModal';
1213
import DetailsPage from '../DetailsPage/DetailsPage';
1314
import { useModalLauncher } from '../modal/ModalProvider';
1415
import { applicationDeleteModal } from '../modal/resource-modals';
@@ -22,6 +23,7 @@ export const ApplicationDetails: React.FC<React.PropsWithChildren> = () => {
2223
// const track = useTrackEvent();
2324
const { namespace, workspace } = useWorkspaceInfo();
2425
const [canCreateComponent] = useAccessReviewForModel(ComponentModel, 'create');
26+
const [canPatchComponent] = useAccessReviewForModel(ComponentModel, 'patch');
2527
const [canCreateIntegrationTest] = useAccessReviewForModel(
2628
IntegrationTestScenarioModel,
2729
'create',
@@ -77,8 +79,10 @@ export const ApplicationDetails: React.FC<React.PropsWithChildren> = () => {
7779
app_name: applicationName,
7880
workspace,
7981
});
80-
// showModal(createCustomizeAllPipelinesModalLauncher(applicationName, namespace));
82+
showModal(createCustomizeAllPipelinesModalLauncher(applicationName, namespace));
8183
},
84+
disabledTooltip: 'You do not have access to manage build pipelines',
85+
isDisabled: !canPatchComponent,
8286
key: 'manage-build-pipelines',
8387
label: 'Manage build pipelines',
8488
},

src/components/Components/ComponentDetails/ComponentDetailsView.tsx

+9-12
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,24 @@
11
import React from 'react';
22
import { useNavigate, useParams } from 'react-router-dom';
3-
import {
4-
Bullseye,
5-
Button,
6-
ButtonVariant,
7-
Spinner,
8-
Text,
9-
TextVariants,
10-
} from '@patternfly/react-core';
3+
import { Bullseye, ButtonVariant, Spinner, Text, TextVariants } from '@patternfly/react-core';
114
import isFunction from 'lodash/isFunction';
125
import isObject from 'lodash/isObject';
136
import pipelineImg from '../../../assets/Pipeline.svg';
147
import { useComponent } from '../../../hooks/useComponents';
158
import { HttpError } from '../../../k8s/error';
16-
import { ComponentGroupVersionKind } from '../../../models';
9+
import { ComponentGroupVersionKind, ComponentModel } from '../../../models';
1710
import { RouterParams } from '../../../routes/utils';
1811
import ErrorEmptyState from '../../../shared/components/empty-state/ErrorEmptyState';
1912
import { useApplicationBreadcrumbs } from '../../../utils/breadcrumb-utils';
13+
import { useAccessReviewForModel } from '../../../utils/rbac';
14+
import { ButtonWithAccessTooltip } from '../../ButtonWithAccessTooltip';
2015
import { createCustomizeComponentPipelineModalLauncher } from '../../CustomizedPipeline/CustomizePipelinesModal';
2116
import { DetailsPage } from '../../DetailsPage';
2217
import { Action } from '../../DetailsPage/types';
2318
import { GettingStartedCard } from '../../GettingStartedCard/GettingStartedCard';
2419
import { useModalLauncher } from '../../modal/ModalProvider';
2520
import { useWorkspaceInfo } from '../../Workspace/useWorkspaceInfo';
2621
import { useComponentActions } from '../component-actions';
27-
2822
import './ComponentDetailsView.scss';
2923

3024
export const COMPONENTS_GS_LOCAL_STORAGE_KEY = 'components-getting-started-modal';
@@ -36,6 +30,7 @@ const ComponentDetailsView: React.FC = () => {
3630
const applicationBreadcrumbs = useApplicationBreadcrumbs();
3731
const showModal = useModalLauncher();
3832
const [component, loaded, componentError] = useComponent(namespace, workspace, componentName);
33+
const [canPatchComponent] = useAccessReviewForModel(ComponentModel, 'patch');
3934

4035
const componentActions = useComponentActions(loaded ? component : undefined, componentName);
4136
const actions: Action[] = React.useMemo(
@@ -96,9 +91,11 @@ const ComponentDetailsView: React.FC = () => {
9691
Using the Advanced or Custom build pipeline, you can enable all additional tasks for
9792
added security.
9893
</div>
99-
<Button
94+
<ButtonWithAccessTooltip
10095
className="pf-u-mt-xl"
10196
variant={ButtonVariant.secondary}
97+
isDisabled={!canPatchComponent}
98+
tooltip="You don't have access to edit the build pipeline plan"
10299
onClick={() =>
103100
showModal(
104101
createCustomizeComponentPipelineModalLauncher(
@@ -109,7 +106,7 @@ const ComponentDetailsView: React.FC = () => {
109106
}
110107
>
111108
Edit build pipeline plan
112-
</Button>
109+
</ButtonWithAccessTooltip>
113110
</GettingStartedCard>
114111
}
115112
breadcrumbs={[

src/components/Components/ComponentsListView/ComponentListView.tsx

+6-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
AlertActionCloseButton,
66
AlertActionLink,
77
AlertVariant,
8-
Button,
98
ButtonVariant,
109
EmptyStateBody,
1110
Flex,
@@ -65,6 +64,7 @@ const ComponentListView: React.FC<React.PropsWithChildren<ComponentListViewProps
6564
true,
6665
);
6766
const [canCreateComponent] = useAccessReviewForModel(ComponentModel, 'create');
67+
const [canPatchComponent] = useAccessReviewForModel(ComponentModel, 'patch');
6868

6969
const showModal = useModalLauncher();
7070

@@ -178,20 +178,22 @@ const ComponentListView: React.FC<React.PropsWithChildren<ComponentListViewProps
178178
complete control over them.
179179
</FlexItem>
180180
<FlexItem>
181-
<Button
181+
<ButtonWithAccessTooltip
182182
className="pf-u-mr-2xl"
183183
variant={ButtonVariant.secondary}
184+
isDisabled={!canPatchComponent}
185+
tooltip="You don't have access to edit the build pipeline plans"
184186
onClick={() =>
185187
showModal(createCustomizeAllPipelinesModalLauncher(applicationName, namespace))
186188
}
187189
>
188190
Edit build pipeline plans
189-
</Button>
191+
</ButtonWithAccessTooltip>
190192
</FlexItem>
191193
</Flex>
192194
</GettingStartedCard>
193195
),
194-
[applicationName, namespace, showModal],
196+
[applicationName, namespace, showModal, canPatchComponent],
195197
);
196198

197199
return (

src/components/Components/component-actions.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export const useComponentActions = (component: ComponentKind, name: string): Act
3131
),
3232
id: 'manage-build-pipeline',
3333
label: 'Edit build pipeline plan',
34+
disabled: !canPatchComponent,
35+
disabledTooltip: "You don't have access to edit the build pipeline plan",
3436
analytics: {
3537
link_name: 'manage-build-pipeline',
3638
link_location: 'component-list',

src/components/WhatsNext/useWhatsNextItems.ts

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const useWhatsNextItems = (applicationName: string) => {
1717
const { workspace, namespace } = useWorkspaceInfo();
1818
const { url: githubAppURL } = useApplicationPipelineGitHubApp();
1919
const [canCreateComponent] = useAccessReviewForModel(ComponentModel, 'create');
20+
const [canPatchComponent] = useAccessReviewForModel(ComponentModel, 'patch');
2021
const [canCreateIntegrationTest] = useAccessReviewForModel(
2122
IntegrationTestScenarioModel,
2223
'create',
@@ -122,6 +123,8 @@ export const useWhatsNextItems = (applicationName: string) => {
122123
'Add some automation by upgrading your default build pipelines to custom build pipelines.',
123124
icon: pipelineIcon,
124125
cta: {
126+
disabled: !canPatchComponent,
127+
disabledTooltip: "You don't have access to manage build pipelines",
125128
label: 'Manage build pipelines',
126129
onClick: () =>
127130
showModal(createCustomizeAllPipelinesModalLauncher(applicationName, namespace)),

0 commit comments

Comments
 (0)