diff --git a/frontend/src/component/common/PermissionIconButton/PermissionIconButton.tsx b/frontend/src/component/common/PermissionIconButton/PermissionIconButton.tsx
index f072a5f338..7cca449c4a 100644
--- a/frontend/src/component/common/PermissionIconButton/PermissionIconButton.tsx
+++ b/frontend/src/component/common/PermissionIconButton/PermissionIconButton.tsx
@@ -13,7 +13,7 @@ import {
} from 'hooks/useHasAccess';
interface IPermissionIconButtonProps {
- permission: string;
+ permission: string | string[];
projectId?: string;
environmentId?: string;
className?: string;
diff --git a/frontend/src/component/providers/AccessProvider/AccessProvider.tsx b/frontend/src/component/providers/AccessProvider/AccessProvider.tsx
index f5a306b048..02b1332dcf 100644
--- a/frontend/src/component/providers/AccessProvider/AccessProvider.tsx
+++ b/frontend/src/component/providers/AccessProvider/AccessProvider.tsx
@@ -70,22 +70,12 @@ const checkPermission = (
if (
p.permission === permission &&
(p.project === project || p.project === '*') &&
- (p.environment === environment || p.environment === '*')
+ (!p.environment ||
+ p.environment === environment ||
+ p.environment === '*')
) {
return true;
}
- if (
- p.permission === permission &&
- (p.project === project || p.project === '*') &&
- !Boolean(p.environment)
- ) {
- return true;
- }
-
- return (
- p.permission === permission &&
- p.project === undefined &&
- p.environment === null
- );
+ return p.permission === permission && !p.project && !p.environment;
};
diff --git a/frontend/src/component/providers/AccessProvider/permissions.ts b/frontend/src/component/providers/AccessProvider/permissions.ts
index cbffeb1d90..b69651bb40 100644
--- a/frontend/src/component/providers/AccessProvider/permissions.ts
+++ b/frontend/src/component/providers/AccessProvider/permissions.ts
@@ -39,3 +39,4 @@ export const SKIP_CHANGE_REQUEST = 'SKIP_CHANGE_REQUEST';
export const READ_PROJECT_API_TOKEN = 'READ_PROJECT_API_TOKEN';
export const CREATE_PROJECT_API_TOKEN = 'CREATE_PROJECT_API_TOKEN';
export const DELETE_PROJECT_API_TOKEN = 'DELETE_PROJECT_API_TOKEN';
+export const UPDATE_PROJECT_SEGMENT = 'UPDATE_PROJECT_SEGMENT';
diff --git a/frontend/src/component/segments/CreateSegmentButton/CreateSegmentButton.tsx b/frontend/src/component/segments/CreateSegmentButton/CreateSegmentButton.tsx
index 57c885a3cd..7ca62fe951 100644
--- a/frontend/src/component/segments/CreateSegmentButton/CreateSegmentButton.tsx
+++ b/frontend/src/component/segments/CreateSegmentButton/CreateSegmentButton.tsx
@@ -1,4 +1,7 @@
-import { CREATE_SEGMENT } from 'component/providers/AccessProvider/permissions';
+import {
+ CREATE_SEGMENT,
+ UPDATE_PROJECT_SEGMENT,
+} from 'component/providers/AccessProvider/permissions';
import PermissionButton from 'component/common/PermissionButton/PermissionButton';
import { NAVIGATE_TO_CREATE_SEGMENT } from 'utils/testIds';
import { useNavigate } from 'react-router-dom';
@@ -17,7 +20,8 @@ export const CreateSegmentButton = () => {
navigate('/segments/create');
}
}}
- permission={CREATE_SEGMENT}
+ permission={[CREATE_SEGMENT, UPDATE_PROJECT_SEGMENT]}
+ projectId={projectId}
data-testid={NAVIGATE_TO_CREATE_SEGMENT}
>
New segment
diff --git a/frontend/src/component/segments/EditSegmentButton/EditSegmentButton.tsx b/frontend/src/component/segments/EditSegmentButton/EditSegmentButton.tsx
index f1eb10a55a..94dfd5d8df 100644
--- a/frontend/src/component/segments/EditSegmentButton/EditSegmentButton.tsx
+++ b/frontend/src/component/segments/EditSegmentButton/EditSegmentButton.tsx
@@ -1,7 +1,10 @@
import { ISegment } from 'interfaces/segment';
import { Edit } from '@mui/icons-material';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
-import { UPDATE_SEGMENT } from 'component/providers/AccessProvider/permissions';
+import {
+ UPDATE_SEGMENT,
+ UPDATE_PROJECT_SEGMENT,
+} from 'component/providers/AccessProvider/permissions';
import { useNavigate } from 'react-router-dom';
import { useOptionalPathParam } from 'hooks/useOptionalPathParam';
@@ -24,7 +27,8 @@ export const EditSegmentButton = ({ segment }: IEditSegmentButtonProps) => {
navigate(`/segments/edit/${segment.id}`);
}
}}
- permission={UPDATE_SEGMENT}
+ permission={[UPDATE_SEGMENT, UPDATE_PROJECT_SEGMENT]}
+ projectId={projectId}
tooltipProps={{ title: 'Edit segment' }}
>
diff --git a/frontend/src/component/segments/RemoveSegmentButton/RemoveSegmentButton.tsx b/frontend/src/component/segments/RemoveSegmentButton/RemoveSegmentButton.tsx
index 5c363decea..5e2177437a 100644
--- a/frontend/src/component/segments/RemoveSegmentButton/RemoveSegmentButton.tsx
+++ b/frontend/src/component/segments/RemoveSegmentButton/RemoveSegmentButton.tsx
@@ -1,6 +1,9 @@
import { ISegment } from 'interfaces/segment';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
-import { DELETE_SEGMENT } from 'component/providers/AccessProvider/permissions';
+import {
+ DELETE_SEGMENT,
+ UPDATE_PROJECT_SEGMENT,
+} from 'component/providers/AccessProvider/permissions';
import { Delete } from '@mui/icons-material';
import { SEGMENT_DELETE_BTN_ID } from 'utils/testIds';
import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
@@ -10,12 +13,14 @@ import { SegmentDelete } from 'component/segments/SegmentDelete/SegmentDelete';
import { useSegmentsApi } from 'hooks/api/actions/useSegmentsApi/useSegmentsApi';
import { formatUnknownError } from 'utils/formatUnknownError';
import { useState } from 'react';
+import { useOptionalPathParam } from 'hooks/useOptionalPathParam';
interface IRemoveSegmentButtonProps {
segment: ISegment;
}
export const RemoveSegmentButton = ({ segment }: IRemoveSegmentButtonProps) => {
+ const projectId = useOptionalPathParam('projectId');
const { refetchSegments } = useSegments();
const { deleteSegment } = useSegmentsApi();
const { setToastData, setToastApiError } = useToast();
@@ -40,7 +45,8 @@ export const RemoveSegmentButton = ({ segment }: IRemoveSegmentButtonProps) => {
<>
toggleModal(true)}
- permission={DELETE_SEGMENT}
+ permission={[DELETE_SEGMENT, UPDATE_PROJECT_SEGMENT]}
+ projectId={projectId}
tooltipProps={{ title: 'Remove segment' }}
data-testid={`${SEGMENT_DELETE_BTN_ID}_${segment.name}`}
>