diff --git a/awx/ui/src/components/UserAndTeamAccessAdd/UserAndTeamAccessAdd.js b/awx/ui/src/components/UserAndTeamAccessAdd/UserAndTeamAccessAdd.js index 7396daeff4..28d71d7424 100644 --- a/awx/ui/src/components/UserAndTeamAccessAdd/UserAndTeamAccessAdd.js +++ b/awx/ui/src/components/UserAndTeamAccessAdd/UserAndTeamAccessAdd.js @@ -1,6 +1,6 @@ import React, { useState, useCallback } from 'react'; import { t } from '@lingui/macro'; -import { useParams } from 'react-router-dom'; +import { useParams, useRouteMatch } from 'react-router-dom'; import styled from 'styled-components'; import useRequest from 'hooks/useRequest'; import useSelected from 'hooks/useSelected'; @@ -27,6 +27,11 @@ function UserAndTeamAccessAdd({ const [selectedResourceType, setSelectedResourceType] = useState(null); const [stepIdReached, setStepIdReached] = useState(1); const { id: userId } = useParams(); + const teamsRouteMatch = useRouteMatch({ + path: '/teams/:id/roles', + exact: true, + }); + const { selected: resourcesSelected, handleSelect: handleResourceSelect } = useSelected([]); @@ -54,6 +59,19 @@ function UserAndTeamAccessAdd({ {} ); + // Object roles can be user only, so we remove them when + // showing role choices for team access + const selectableRoles = { + ...resourcesSelected[0]?.summary_fields?.object_roles, + }; + if (teamsRouteMatch && resourcesSelected[0]?.type === 'organization') { + Object.keys(selectableRoles).forEach((key) => { + if (selectableRoles[key].user_only) { + delete selectableRoles[key]; + } + }); + } + const steps = [ { id: 1, @@ -101,7 +119,7 @@ function UserAndTeamAccessAdd({ component: resourcesSelected?.length > 0 && (