fix(access-control): show only environment users [EE-6315] (#10614)

pull/10458/head
Chaim Lev-Ari 2023-11-15 09:33:29 +02:00 committed by GitHub
parent 3525a1af77
commit 51474262eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 53 additions and 38 deletions

View File

@ -56,6 +56,7 @@
resource-control="config.ResourceControl" resource-control="config.ResourceControl"
resource-type="resourceType" resource-type="resourceType"
on-update-success="(onUpdateResourceControlSuccess)" on-update-success="(onUpdateResourceControlSuccess)"
environment-id="endpoint.Id"
> >
</access-control-panel> </access-control-panel>
<!-- !access-control-panel --> <!-- !access-control-panel -->

View File

@ -9,6 +9,7 @@ angular.module('portainer.docker').controller('ConfigController', [
'endpoint', 'endpoint',
function ($scope, $transition$, $state, ConfigService, Notifications, endpoint) { function ($scope, $transition$, $state, ConfigService, Notifications, endpoint) {
$scope.resourceType = ResourceControlType.Config; $scope.resourceType = ResourceControlType.Config;
$scope.endpoint = endpoint;
$scope.onUpdateResourceControlSuccess = function () { $scope.onUpdateResourceControlSuccess = function () {
$state.reload(); $state.reload();

View File

@ -172,6 +172,7 @@
resource-control="container.ResourceControl" resource-control="container.ResourceControl"
resource-type="resourceType" resource-type="resourceType"
on-update-success="(onUpdateResourceControlSuccess)" on-update-success="(onUpdateResourceControlSuccess)"
environment-id="endpoint.Id"
> >
</access-control-panel> </access-control-panel>
<!-- !access-control-panel --> <!-- !access-control-panel -->

View File

@ -53,6 +53,7 @@
resource-control="secret.ResourceControl" resource-control="secret.ResourceControl"
resource-type="resourceType" resource-type="resourceType"
on-update-success="(onUpdateResourceControlSuccess)" on-update-success="(onUpdateResourceControlSuccess)"
environment-id="endpoint.Id"
> >
</access-control-panel> </access-control-panel>
<!-- !access-control-panel --> <!-- !access-control-panel -->

View File

@ -1,14 +1,11 @@
import { ResourceControlType } from '@/react/portainer/access-control/types'; import { ResourceControlType } from '@/react/portainer/access-control/types';
angular.module('portainer.docker').controller('SecretController', [ angular.module('portainer.docker').controller('SecretController', SecretController);
'$scope',
'$transition$',
'$state',
'SecretService',
'Notifications',
function ($scope, $transition$, $state, SecretService, Notifications) {
$scope.resourceType = ResourceControlType.Secret;
/* @ngInject */
function SecretController($scope, $transition$, $state, SecretService, Notifications, endpoint) {
$scope.resourceType = ResourceControlType.Secret;
$scope.endpoint = endpoint;
$scope.onUpdateResourceControlSuccess = function () { $scope.onUpdateResourceControlSuccess = function () {
$state.reload(); $state.reload();
}; };
@ -35,5 +32,4 @@ angular.module('portainer.docker').controller('SecretController', [
} }
initView(); initView();
}, }
]);

View File

@ -209,6 +209,7 @@
resource-control="service.ResourceControl" resource-control="service.ResourceControl"
resource-type="resourceType" resource-type="resourceType"
on-update-success="(onUpdateResourceControlSuccess)" on-update-success="(onUpdateResourceControlSuccess)"
environment-id="endpoint.Id"
> >
</access-control-panel> </access-control-panel>
<!-- !access-control-panel --> <!-- !access-control-panel -->

View File

@ -53,6 +53,7 @@
resource-control="volume.ResourceControl" resource-control="volume.ResourceControl"
resource-type="resourceType" resource-type="resourceType"
on-update-success="(onUpdateResourceControlSuccess)" on-update-success="(onUpdateResourceControlSuccess)"
environment-id="endpoint.Id"
> >
</access-control-panel> </access-control-panel>
<!-- !access-control-panel --> <!-- !access-control-panel -->

View File

@ -12,6 +12,7 @@ angular.module('portainer.docker').controller('VolumeController', [
'endpoint', 'endpoint',
function ($scope, $state, $transition$, VolumeService, ContainerService, Notifications, HttpRequestHelper, endpoint) { function ($scope, $state, $transition$, VolumeService, ContainerService, Notifications, HttpRequestHelper, endpoint) {
$scope.resourceType = ResourceControlType.Volume; $scope.resourceType = ResourceControlType.Volume;
$scope.endpoint = endpoint;
$scope.onUpdateResourceControlSuccess = function () { $scope.onUpdateResourceControlSuccess = function () {
$state.reload(); $state.reload();

View File

@ -39,7 +39,7 @@ export function useUsers<T = User[]>(
select: (data: User[]) => T = (data) => data as unknown as T select: (data: User[]) => T = (data) => data as unknown as T
) { ) {
const users = useQuery( const users = useQuery(
['users'], ['users', { includeAdministrator, environmentId }],
() => getUsers(includeAdministrator, environmentId), () => getUsers(includeAdministrator, environmentId),
{ {
meta: { meta: {

View File

@ -187,6 +187,7 @@ export function CreateContainerInstanceForm() {
onChange={(values) => setFieldValue('accessControl', values)} onChange={(values) => setFieldValue('accessControl', values)}
values={values.accessControl} values={values.accessControl}
errors={errors.accessControl} errors={errors.accessControl}
environmentId={environmentId}
/> />
<div className="form-group"> <div className="form-group">

View File

@ -169,6 +169,7 @@ export function BaseForm({
} }
errors={errors?.accessControl} errors={errors?.accessControl}
values={values.accessControl} values={values.accessControl}
environmentId={environment.Id}
/> />
<div className="form-group"> <div className="form-group">

View File

@ -43,7 +43,12 @@ function Template({ userRole }: Args) {
return ( return (
<QueryClientProvider client={testQueryClient}> <QueryClientProvider client={testQueryClient}>
<UserContext.Provider value={userProviderState}> <UserContext.Provider value={userProviderState}>
<AccessControlForm values={value} onChange={setValue} errors={{}} /> <AccessControlForm
values={value}
onChange={setValue}
errors={{}}
environmentId={1}
/>
</UserContext.Provider> </UserContext.Provider>
</QueryClientProvider> </QueryClientProvider>
); );

View File

@ -315,6 +315,7 @@ async function renderComponent(
const renderResult = renderWithQueryClient( const renderResult = renderWithQueryClient(
<UserContext.Provider value={state}> <UserContext.Provider value={state}>
<AccessControlForm <AccessControlForm
environmentId={1}
errors={{}} errors={{}}
values={values} values={values}
onChange={onChange} onChange={onChange}

View File

@ -7,6 +7,7 @@ import { SwitchField } from '@@/form-components/SwitchField';
import { EditDetails } from '../EditDetails'; import { EditDetails } from '../EditDetails';
import { ResourceControlOwnership, AccessControlFormData } from '../types'; import { ResourceControlOwnership, AccessControlFormData } from '../types';
import { EnvironmentId } from '../../environments/types';
export interface Props { export interface Props {
values: AccessControlFormData; values: AccessControlFormData;
@ -14,6 +15,7 @@ export interface Props {
hideTitle?: boolean; hideTitle?: boolean;
formNamespace?: string; formNamespace?: string;
errors?: FormikErrors<AccessControlFormData>; errors?: FormikErrors<AccessControlFormData>;
environmentId: EnvironmentId;
} }
export function AccessControlForm({ export function AccessControlForm({
@ -22,6 +24,7 @@ export function AccessControlForm({
hideTitle, hideTitle,
formNamespace, formNamespace,
errors, errors,
environmentId,
}: Props) { }: Props) {
const { isAdmin } = useUser(); const { isAdmin } = useUser();
@ -50,6 +53,7 @@ export function AccessControlForm({
values={values} values={values}
errors={errors} errors={errors}
formNamespace={formNamespace} formNamespace={formNamespace}
environmentId={environmentId}
/> />
)} )}
</> </>

View File

@ -30,7 +30,7 @@ interface Props {
resourceType: ResourceControlType; resourceType: ResourceControlType;
resourceId: ResourceId; resourceId: ResourceId;
resourceControl?: ResourceControlViewModel; resourceControl?: ResourceControlViewModel;
environmentId?: EnvironmentId; environmentId: EnvironmentId;
onCancelClick(): void; onCancelClick(): void;
onUpdateSuccess(): Promise<void>; onUpdateSuccess(): Promise<void>;
} }

View File

@ -19,7 +19,7 @@ interface Props {
isPublicVisible?: boolean; isPublicVisible?: boolean;
errors?: FormikErrors<AccessControlFormData>; errors?: FormikErrors<AccessControlFormData>;
formNamespace?: string; formNamespace?: string;
environmentId?: EnvironmentId; environmentId: EnvironmentId;
} }
export function EditDetails({ export function EditDetails({

View File

@ -2,7 +2,7 @@ import { useTeams } from '@/react/portainer/users/teams/queries';
import { useUsers } from '@/portainer/users/queries'; import { useUsers } from '@/portainer/users/queries';
import { EnvironmentId } from '@/react/portainer/environments/types'; import { EnvironmentId } from '@/react/portainer/environments/types';
export function useLoadState(environmentId?: EnvironmentId, enabled = true) { export function useLoadState(environmentId: EnvironmentId, enabled = true) {
const teams = useTeams(false, environmentId); const teams = useTeams(false, environmentId);
const users = useUsers(false, environmentId, enabled); const users = useUsers(false, environmentId, enabled);