Skip to content

Commit 056f74b

Browse files
authored
Merge pull request #2123 from devtron-labs/feat/terminal-permission
feat: terminal permission for devtron and helm apps
2 parents 8d24214 + b608e32 commit 056f74b

File tree

20 files changed

+91
-122
lines changed

20 files changed

+91
-122
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"private": true,
55
"homepage": "/dashboard",
66
"dependencies": {
7-
"@devtron-labs/devtron-fe-common-lib": "0.5.0",
7+
"@devtron-labs/devtron-fe-common-lib": "0.5.1",
88
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
99
"@rjsf/core": "^5.13.3",
1010
"@rjsf/utils": "^5.13.3",

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/AppPermissionDetail.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616

1717
/* eslint-disable jsx-a11y/label-has-associated-control */
18+
import { ACCESS_TYPE_MAP } from '@devtron-labs/devtron-fe-common-lib'
1819
import { ReactComponent as AddIcon } from '../../../../../../assets/icons/ic-add.svg'
19-
import { ACCESS_TYPE_MAP } from '../../../../../../config'
2020
import { usePermissionConfiguration } from '../PermissionConfigurationForm'
2121
import DirectPermission from './DirectPermission'
2222
import { getPermissionDetailRowClass } from './utils'

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/AppPermissions.component.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ import {
2525
TabGroup,
2626
useAsync,
2727
useMainContext,
28+
ACCESS_TYPE_MAP,
29+
EntityTypes,
2830
} from '@devtron-labs/devtron-fe-common-lib'
29-
import { EntityTypes, ActionTypes } from '../../../constants'
30-
import { ACCESS_TYPE_MAP, HELM_APP_UNASSIGNED_PROJECT, SELECT_ALL_VALUE, SERVER_MODE } from '../../../../../../config'
31+
import { ActionTypes } from '../../../constants'
32+
import { HELM_APP_UNASSIGNED_PROJECT, SELECT_ALL_VALUE, SERVER_MODE } from '../../../../../../config'
3133
import { importComponentFromFELibrary, mapByKey } from '../../../../../../components/common'
3234
import K8sPermissions from '../K8sObjectPermissions/K8sPermissions.component'
3335
import { apiGroupAll } from '../K8sObjectPermissions/utils'

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/DirectPermission.tsx

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,22 @@ import {
2323
getIsRequestAborted,
2424
LoadingIndicator,
2525
ReactSelectInputAction,
26+
ACCESS_TYPE_MAP,
27+
EntityTypes,
2628
} from '@devtron-labs/devtron-fe-common-lib'
2729
import Select, { components } from 'react-select'
2830
import Tippy from '@tippyjs/react'
2931
import { sortBySelected, importComponentFromFELibrary } from '../../../../../../components/common'
3032
import { getAllWorkflowsForAppNames } from '../../../../../../services/service'
31-
import { ACCESS_TYPE_MAP, HELM_APP_UNASSIGNED_PROJECT, SELECT_ALL_VALUE } from '../../../../../../config'
33+
import { HELM_APP_UNASSIGNED_PROJECT, SELECT_ALL_VALUE } from '../../../../../../config'
3234
import { ReactComponent as TrashIcon } from '../../../../../../assets/icons/ic-delete-interactive.svg'
3335
import { GroupHeading, Option as singleOption } from '../../../../../../components/v2/common/ReactSelect.utils'
3436
import { useAuthorizationContext } from '../../../AuthorizationProvider'
3537
import {
3638
CONFIG_APPROVER_ACTION,
3739
authorizationSelectStyles,
38-
EntityTypes,
3940
ARTIFACT_PROMOTER_ACTION,
41+
TERMINAL_EXEC_ACTION,
4042
} from '../../../constants'
4143
import { AppOption, ClusterValueContainer, ProjectValueContainer, ValueContainer, WorkflowGroupHeading } from './common'
4244
import {
@@ -80,17 +82,20 @@ const DirectPermission = ({
8082
const multiRole = permission.action.value.split(',')
8183
const doesConfigApproverRoleExist = multiRole.includes(CONFIG_APPROVER_ACTION.value)
8284
const doesArtifactPromoterRoleExist = multiRole.includes(ARTIFACT_PROMOTER_ACTION.value)
85+
const doesTerminalAccessRoleExist = multiRole.includes(TERMINAL_EXEC_ACTION.value)
8386

8487
const primaryActionRoleIndex = getPrimaryRoleIndex(multiRole, [
8588
CONFIG_APPROVER_ACTION.value,
8689
ARTIFACT_PROMOTER_ACTION.value,
90+
TERMINAL_EXEC_ACTION.value,
8791
])
8892

8993
const primaryActionRole = {
9094
label: multiRole[primaryActionRoleIndex],
9195
value: multiRole[primaryActionRoleIndex],
9296
configApprover: doesConfigApproverRoleExist || permission.action.configApprover,
9397
artifactPromoter: doesArtifactPromoterRoleExist || permission.action.artifactPromoter,
98+
terminalExec: doesTerminalAccessRoleExist || permission.action.terminalExec,
9499
}
95100

96101
const [openMenu, setOpenMenu] = useState<DirectPermissionFieldName | ''>('')
@@ -131,6 +136,9 @@ const DirectPermission = ({
131136
}
132137
}
133138

139+
const getSelectedRolesDisplay = (selectedPermissions: string[]) =>
140+
selectedPermissions.filter((selectedVal) => !!selectedVal).join(', ')
141+
134142
const metaRolesForAccessType = _getMetaRolesForAccessType()
135143
const listForAccessType = getListForAccessType(permission.accessType)
136144

@@ -175,10 +183,18 @@ const DirectPermission = ({
175183
...props,
176184
}}
177185
>
178-
{value === SELECT_ALL_VALUE ? 'Admin' : metaRolesForAccessType[value].value}
179-
{ApproverPermission &&
180-
(permission.approver || primaryActionRole.configApprover || primaryActionRole.artifactPromoter) &&
181-
', Approver'}
186+
{getSelectedRolesDisplay([
187+
value === SELECT_ALL_VALUE ? 'Admin' : metaRolesForAccessType[value].value,
188+
...(ApproverPermission
189+
? [
190+
(permission.approver ||
191+
primaryActionRole.configApprover ||
192+
primaryActionRole.artifactPromoter) &&
193+
'Approver',
194+
primaryActionRole.terminalExec && 'Terminal',
195+
]
196+
: []),
197+
])}
182198
{React.cloneElement(children[1])}
183199
</components.ValueContainer>
184200
)
@@ -195,19 +211,24 @@ const DirectPermission = ({
195211
const RoleMenuList = (props) => (
196212
<components.MenuList {...props}>
197213
{props.children}
198-
{ApproverPermission && permission.accessType === ACCESS_TYPE_MAP.DEVTRON_APPS && (
199-
<ApproverPermission
200-
optionProps={props}
201-
approver={permission.approver}
202-
configApprover={primaryActionRole.configApprover}
203-
artifactPromoter={primaryActionRole.artifactPromoter}
204-
handleDirectPermissionChange={(...rest) => {
205-
props.selectOption(props.selectProps.value)
206-
handleDirectPermissionChange(...rest)
207-
}}
208-
formatOptionLabel={formatOptionLabel}
209-
/>
210-
)}
214+
{ApproverPermission &&
215+
(permission.accessType === ACCESS_TYPE_MAP.DEVTRON_APPS ||
216+
permission.accessType === ACCESS_TYPE_MAP.HELM_APPS) && (
217+
<ApproverPermission
218+
optionProps={props}
219+
approver={permission.approver}
220+
configApprover={primaryActionRole.configApprover}
221+
artifactPromoter={primaryActionRole.artifactPromoter}
222+
terminalExec={primaryActionRole.terminalExec}
223+
handleDirectPermissionChange={(...rest) => {
224+
props.selectOption(props.selectProps.value)
225+
handleDirectPermissionChange(...rest)
226+
}}
227+
formatOptionLabel={formatOptionLabel}
228+
accessType={permission.accessType}
229+
customRoles={customRoles}
230+
/>
231+
)}
211232
</components.MenuList>
212233
)
213234

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/common.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616

1717
/* eslint-disable react/destructuring-assignment */
1818
/* eslint-disable react/prop-types */
19-
import { Checkbox, CHECKBOX_VALUE, noop } from '@devtron-labs/devtron-fe-common-lib'
19+
import { Checkbox, CHECKBOX_VALUE, noop, EntityTypes } from '@devtron-labs/devtron-fe-common-lib'
2020
import React from 'react'
2121
import { components } from 'react-select'
2222
import { GroupHeading } from '../../../../../../components/v2/common/ReactSelect.utils'
2323
import { SELECT_ALL_VALUE } from '../../../../../../config'
24-
import { EntityTypes } from '../../../constants'
2524
import { ALL_EXISTING_AND_FUTURE_ENVIRONMENTS_VALUE, DirectPermissionFieldName } from './constants'
2625

2726
export const WorkflowGroupHeading = (props) => <GroupHeading {...props} hideClusterName />

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/constants.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { ACCESS_TYPE_MAP, SELECT_ALL_VALUE } from '../../../../../../config'
18-
import { ActionTypes, authorizationSelectStyles, EntityTypes } from '../../../constants'
17+
import { ACCESS_TYPE_MAP, EntityTypes } from '@devtron-labs/devtron-fe-common-lib'
18+
import { SELECT_ALL_VALUE } from '../../../../../../config'
19+
import { ActionTypes, authorizationSelectStyles } from '../../../constants'
1920
import { getDefaultStatusAndTimeout } from '../../../libUtils'
2021
import { DirectPermissionsRoleFilter } from '../../../types'
2122

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/types.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { ServerError } from '@devtron-labs/devtron-fe-common-lib'
17+
import { ServerError, ACCESS_TYPE_MAP } from '@devtron-labs/devtron-fe-common-lib'
1818
import { JobList } from '../../../../../../components/Jobs/Types'
19-
import { ACCESS_TYPE_MAP } from '../../../../../../config'
2019
import { DirectPermissionsRoleFilter } from '../../../types'
2120

2221
type AppsList = Map<number, { loading: boolean; result: { id: number; name: string }[]; error: ServerError }>

src/Pages/GlobalConfigurations/Authorization/Shared/components/AppPermissions/utils.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { OptionType } from '@devtron-labs/devtron-fe-common-lib'
17+
import { OptionType, ACCESS_TYPE_MAP, EntityTypes } from '@devtron-labs/devtron-fe-common-lib'
1818
import { DEFAULT_ENV } from '../../../../../../components/app/details/triggerView/Constants'
1919
import { createClusterEnvGroup } from '../../../../../../components/common'
20-
import { ACCESS_TYPE_MAP, SELECT_ALL_VALUE, SERVER_MODE } from '../../../../../../config'
21-
import { EntityTypes } from '../../../constants'
20+
import { SELECT_ALL_VALUE, SERVER_MODE } from '../../../../../../config'
2221
import { ALL_EXISTING_AND_FUTURE_ENVIRONMENTS_VALUE } from './constants'
2322
import { DirectPermissionRow } from './types'
2423

src/Pages/GlobalConfigurations/Authorization/Shared/components/K8sObjectPermissions/K8sListItemCard.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
OptionType,
2929
LoadingIndicator,
3030
GVKType,
31+
EntityTypes,
3132
} from '@devtron-labs/devtron-fe-common-lib'
3233
import CreatableSelect from 'react-select/creatable'
3334
import Tippy from '@tippyjs/react'
@@ -56,7 +57,7 @@ import { ReactComponent as InfoIcon } from '../../../../../../assets/icons/info-
5657
import { formatResourceKindOptionLabel, k8sRoleSelectionStyle, multiSelectAllState } from './utils'
5758
import { useAuthorizationContext } from '../../../AuthorizationProvider'
5859
import { parseData } from '../../../utils'
59-
import { authorizationSelectStyles, ALL_NAMESPACE, EntityTypes } from '../../../constants'
60+
import { authorizationSelectStyles, ALL_NAMESPACE } from '../../../constants'
6061
import { K8sPermissionActionType, K8S_PERMISSION_INFO_MESSAGE, resourceSelectStyles } from './constants'
6162
import { SELECT_ALL_VALUE } from '../../../../../../config'
6263
import { K8sItemCardLoadingState, K8sListItemCardType } from './types'

src/Pages/GlobalConfigurations/Authorization/Shared/components/K8sObjectPermissions/utils.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { ReactSelectInputAction } from '@devtron-labs/devtron-fe-common-lib'
17+
import { ReactSelectInputAction, EntityTypes } from '@devtron-labs/devtron-fe-common-lib'
1818
import { SELECT_ALL_VALUE } from '../../../../../../config'
19-
import { ActionTypes, ACTION_LABEL, EntityTypes, authorizationSelectStyles } from '../../../constants'
19+
import { ActionTypes, ACTION_LABEL, authorizationSelectStyles } from '../../../constants'
2020
import { K8sPermissionFilter } from '../../../types'
2121
import { getDefaultStatusAndTimeout } from '../../../libUtils'
2222
import { K8S_EMPTY_GROUP } from '../../../../../../components/ResourceBrowser/Constants'

0 commit comments

Comments
 (0)