1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-07 23:05:26 +02:00

fix(access): support to list users or teams with specified endpoint [EE-1704] (#7610)

This commit is contained in:
Oscar Zhou 2022-09-16 14:45:14 +12:00 committed by GitHub
parent f71fe87ba7
commit 53025178ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 632 additions and 61 deletions

View file

@ -4,12 +4,13 @@ import { ResourceControlOwnership as RCO } from '@/react/portainer/access-contro
angular.module('portainer.app').controller('porAccessControlFormController', [
'$q',
'$scope',
'$state',
'UserService',
'TeamService',
'Notifications',
'Authentication',
'ResourceControlService',
function ($q, $scope, UserService, TeamService, Notifications, Authentication, ResourceControlService) {
function ($q, $scope, $state, UserService, TeamService, Notifications, Authentication, ResourceControlService) {
var ctrl = this;
ctrl.RCO = RCO;
@ -54,9 +55,10 @@ angular.module('portainer.app').controller('porAccessControlFormController', [
ctrl.formData.Ownership = ctrl.RCO.ADMINISTRATORS;
}
const environmentId = $state.params.endpointId;
$q.all({
availableTeams: TeamService.teams(),
availableUsers: isAdmin ? UserService.users(false) : [],
availableTeams: TeamService.teams(environmentId),
availableUsers: isAdmin ? UserService.users(false, environmentId) : [],
})
.then(function success(data) {
ctrl.availableUsers = _.orderBy(data.availableUsers, 'Username', 'asc');

View file

@ -98,5 +98,6 @@ export const componentsModule = angular
'resourceControl',
'resourceId',
'resourceType',
'environmentId',
])
).name;

View file

@ -8,7 +8,7 @@ angular.module('portainer.app').factory('Teams', [
{},
{
create: { method: 'POST', ignoreLoadingBar: true },
query: { method: 'GET', isArray: true },
query: { method: 'GET', isArray: true, params: { environmentId: '@environmentId' } },
get: { method: 'GET', params: { id: '@id' } },
remove: { method: 'DELETE', params: { id: '@id' } },
queryMemberships: { method: 'GET', isArray: true, params: { id: '@id', entity: 'memberships' } },

View file

@ -8,9 +8,9 @@ angular.module('portainer.app').factory('TeamService', [
'use strict';
var service = {};
service.teams = function () {
service.teams = function (environmentId) {
var deferred = $q.defer();
Teams.query()
Teams.query({ environmentId: environmentId })
.$promise.then(function success(data) {
var teams = data.map(function (item) {
return new TeamViewModel(item);

View file

@ -9,8 +9,8 @@ export function UserService($q, Users, TeamService, TeamMembershipService) {
'use strict';
var service = {};
service.users = async function (includeAdministrators) {
const users = await getUsers(includeAdministrators);
service.users = async function (includeAdministrators, environmentId) {
const users = await getUsers(includeAdministrators, environmentId);
return users.map((u) => new UserViewModel(u));
};

View file

@ -34,16 +34,21 @@ export function useIsTeamLeader(user: User) {
export function useUsers<T = User[]>(
includeAdministrator = false,
environmentId = 0,
enabled = true,
select: (data: User[]) => T = (data) => data as unknown as T
) {
const users = useQuery(['users'], () => getUsers(includeAdministrator), {
meta: {
error: { title: 'Failure', message: 'Unable to load users' },
},
enabled,
select,
});
const users = useQuery(
['users'],
() => getUsers(includeAdministrator, environmentId),
{
meta: {
error: { title: 'Failure', message: 'Unable to load users' },
},
enabled,
select,
}
);
return users;
}

View file

@ -4,9 +4,14 @@ import { TeamMembership } from '@/react/portainer/users/teams/types';
import { User, UserId } from './types';
import { filterNonAdministratorUsers } from './user.helpers';
export async function getUsers(includeAdministrators = false) {
export async function getUsers(
includeAdministrators = false,
environmentId = 0
) {
try {
const { data } = await axios.get<User[]>(buildUrl());
const { data } = await axios.get<User[]>(buildUrl(), {
params: { environmentId },
});
return includeAdministrators ? data : filterNonAdministratorUsers(data);
} catch (e) {

View file

@ -256,6 +256,7 @@
resource-id="stack.EndpointId + '_' + stack.Name"
resource-control="stack.ResourceControl"
resource-type="resourceType"
environment-id="stack.EndpointId"
on-update-success="(onUpdateResourceControlSuccess)"
>
</access-control-panel>