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:
parent
f71fe87ba7
commit
53025178ef
25 changed files with 632 additions and 61 deletions
|
@ -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');
|
||||
|
|
|
@ -98,5 +98,6 @@ export const componentsModule = angular
|
|||
'resourceControl',
|
||||
'resourceId',
|
||||
'resourceType',
|
||||
'environmentId',
|
||||
])
|
||||
).name;
|
||||
|
|
|
@ -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' } },
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue