diff --git a/awx/ui/client/features/credentials/legacy.credentials.js b/awx/ui/client/features/credentials/legacy.credentials.js index 26f2163115..e271da0936 100644 --- a/awx/ui/client/features/credentials/legacy.credentials.js +++ b/awx/ui/client/features/credentials/legacy.credentials.js @@ -149,10 +149,10 @@ function LegacyCredentialsService (pathService) { 'QuerySet', '$stateParams', 'GetBasePath', - (list, qs, $stateParams, GetBasePath) => { - let path = GetBasePath(list.basePath) || GetBasePath(list.name); + 'resourceData', + (list, qs, $stateParams, GetBasePath, resourceData) => { + let path = resourceData.data.organization ? GetBasePath('organizations') + `${resourceData.data.organization}/users` : ((list.basePath) || GetBasePath(list.name)); return qs.search(path, $stateParams.user_search); - } ], teamsDataset: [ @@ -160,9 +160,19 @@ function LegacyCredentialsService (pathService) { 'QuerySet', '$stateParams', 'GetBasePath', - (list, qs, $stateParams, GetBasePath) => { + 'resourceData', + (list, qs, $stateParams, GetBasePath, resourceData) => { let path = GetBasePath(list.basePath) || GetBasePath(list.name); - return qs.search(path, $stateParams.team_search); + + if(!resourceData.data.organization) { + return null; + } + else { + $stateParams[`${list.iterator}_search`].organization = resourceData.data.organization; + return qs.search(path, $stateParams.team_search); + } + + } ], resourceData: ['CredentialModel', '$stateParams', (Credential, $stateParams) => { @@ -198,7 +208,8 @@ function LegacyCredentialsService (pathService) { teams-dataset='$resolve.teamsDataset' selected='allSelected' resource-data='$resolve.resourceData' - title='Add Users / Teams'> + without-team-permissions='{{$resolve.resourceData.data.organization ? null : true}}' + title='{{$resolve.resourceData.data.organization ? "Add Users / Teams" : "Add Users"}}'> ` } }, diff --git a/awx/ui/client/src/shared/stateDefinitions.factory.js b/awx/ui/client/src/shared/stateDefinitions.factory.js index eae6756f1d..78b9c95805 100644 --- a/awx/ui/client/src/shared/stateDefinitions.factory.js +++ b/awx/ui/client/src/shared/stateDefinitions.factory.js @@ -313,15 +313,58 @@ function($injector, $stateExtender, $log, i18n) { return qs.search(path, $stateParams[`${list.iterator}_search`]); } ], - credentialsDataset: ['CredentialList', 'QuerySet', '$stateParams', 'GetBasePath', 'resourceData', - function(list, qs, $stateParams, GetBasePath, resourceData) { + credentialsDataset: ['CredentialList', 'QuerySet', '$stateParams', 'GetBasePath', 'resourceData', 'Rest', '$q', + function(list, qs, $stateParams, GetBasePath, resourceData, Rest, $q) { let path = GetBasePath(list.basePath) || GetBasePath(list.name); if(resourceData.data.type === "team") { $stateParams[`${list.iterator}_search`].organization = resourceData.data.organization; } - return qs.search(path, $stateParams[`${list.iterator}_search`]); + if(resourceData.data.type === "user") { + + let resolve = $q.defer(); + + let getMoreOrgs = function(data, arr) { + Rest.setUrl(data.next); + Rest.get() + .then(function (resData) { + if (data.next) { + getMoreOrgs(resData.data, arr.concat(resData.data.results)); + } else { + resolve.resolve(arr.concat(resData.data.results)); + } + }); + }; + + Rest.setUrl(GetBasePath('users') + `${resourceData.data.id}/organizations?page_size=200`); + Rest.get() + .then(function(resData) { + if (resData.data.next) { + getMoreOrgs(resData.data, resData.data.results); + } else { + resolve.resolve(resData.data.results); + } + }); + + return resolve.promise.then(function (organizations) { + if(organizations && organizations.length > 0) { + let orgIds = _.map(organizations, function(organization){ + return organization.id; + }); + + $stateParams[`${list.iterator}_search`].or__organization = 'null'; + $stateParams[`${list.iterator}_search`].or__organization__in = orgIds.join(); + + } + + return qs.search(path, $stateParams[`${list.iterator}_search`]); + }); + + } + else { + return qs.search(path, $stateParams[`${list.iterator}_search`]); + } } ], organizationsDataset: ['OrganizationList', 'QuerySet', '$stateParams', 'GetBasePath',