diff --git a/ui/admin/app/routes/scopes/scope/groups/group/members.js b/ui/admin/app/routes/scopes/scope/groups/group/members.js index 54aa7f585..b15451bd9 100644 --- a/ui/admin/app/routes/scopes/scope/groups/group/members.js +++ b/ui/admin/app/routes/scopes/scope/groups/group/members.js @@ -1,7 +1,7 @@ import Route from '@ember/routing/route'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; -import { hash, all } from 'rsvp'; +import { hash } from 'rsvp'; import { loading } from 'ember-loading'; import { confirm } from 'core/decorators/confirm'; import { notifySuccess, notifyError } from 'core/decorators/notify'; @@ -11,6 +11,7 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route { @service intl; @service notify; + @service resourceFilterStore; // =methods @@ -19,15 +20,16 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route { * @return {Promise{group: GroupModel, members: Promise{[UserModel]}}} */ model() { - const { id: scopeID } = this.modelFor('scopes.scope'); const group = this.modelFor('scopes.scope.groups.group'); return hash({ group, - members: all( - group.member_ids.map((id) => - this.store.findRecord('user', id, { adapterOptions: { scopeID } }) - ) - ), + members: group.member_ids?.length + ? this.resourceFilterStore.queryBy( + 'user', + { id: group.member_ids }, + { scope_id: 'global', recursive: true } + ) + : [], }); } diff --git a/ui/admin/app/routes/scopes/scope/roles/role/principals.js b/ui/admin/app/routes/scopes/scope/roles/role/principals.js index 17172e0f8..275432bfa 100644 --- a/ui/admin/app/routes/scopes/scope/roles/role/principals.js +++ b/ui/admin/app/routes/scopes/scope/roles/role/principals.js @@ -1,5 +1,4 @@ import Route from '@ember/routing/route'; -import { all, hash } from 'rsvp'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import { loading } from 'ember-loading'; @@ -10,6 +9,7 @@ export default class ScopesScopeRolesRolePrincipalsRoute extends Route { // =services @service intl; @service notify; + @service resourceFilterStore; // =methods @@ -18,31 +18,43 @@ export default class ScopesScopeRolesRolePrincipalsRoute extends Route { * @param {object} params * @return {Promise{RoleModel}} */ - model() { - const adapterOptions = { scopeID: this.modelFor('scopes.scope').id }; + async model() { const role = this.modelFor('scopes.scope.roles.role'); - const users = role.principals + + // Gather user and group IDs as separate arrays, since these + // will be queried in separate API queries. + const userIDs = role.principals .filterBy('type', 'user') - .map(({ principal_id }) => - this.store - .findRecord('user', principal_id, { adapterOptions }) - .then((model) => ({ - type: 'user', - model, - })) - ); - const groups = role.principals + .map(({ principal_id }) => principal_id); + const groupIDs = role.principals .filterBy('type', 'group') - .map(({ principal_id }) => - this.store.findRecord('group', principal_id).then((model) => ({ - type: 'group', - model, - })) - ); - return hash({ + .map(({ principal_id }) => principal_id); + + // Query for users. + const users = userIDs?.length + ? ( + await this.resourceFilterStore.queryBy( + 'user', + { id: userIDs }, + { scope_id: 'global', recursive: true } + ) + ).map((model) => model) + : []; + // Query for groups. + const groups = groupIDs?.length + ? ( + await this.resourceFilterStore.queryBy( + 'group', + { id: groupIDs }, + { scope_id: 'global', recursive: true } + ) + ).map((model) => model) + : []; + + return { role, - principals: all(users.concat(groups)), - }); + principals: users.concat(groups), + }; } // =actions diff --git a/ui/admin/app/templates/scopes/scope/roles/role/principals.hbs b/ui/admin/app/templates/scopes/scope/roles/role/principals.hbs index dff671518..1b098a49a 100644 --- a/ui/admin/app/templates/scopes/scope/roles/role/principals.hbs +++ b/ui/admin/app/templates/scopes/scope/roles/role/principals.hbs @@ -46,36 +46,38 @@ {{#each @model.principals as |principal|}} - {{principal.model.displayName}} - {{#if principal.model.accountName}} -
{{principal.model.accountName}} + {{principal.displayName}} + {{#if principal.accountName}} +
{{principal.accountName}} {{/if}}
- {{principal.model.id}} + {{principal.id}} {{t - (concat 'resources.role.principal.types.' principal.type) + (concat + 'resources.role.principal.types.' + principal.constructor.modelName + ) }} - + {{#if (can 'removePrincipals role' @model.role)}} @@ -89,10 +91,7 @@ > {{t 'actions.remove'}}