mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-18 13:48:58 +02:00
Fix/default strategy permission cherry pick (#8144)
Cherry pick #8113, #8114 and #8112 --------- Co-authored-by: Thomas Heartman <thomas@getunleash.io>
This commit is contained in:
parent
446e123c1a
commit
ccc63446c3
@ -27,7 +27,15 @@ export const StrategyVariants: FC<{
|
|||||||
projectId: string;
|
projectId: string;
|
||||||
environment: string;
|
environment: string;
|
||||||
editable?: boolean;
|
editable?: boolean;
|
||||||
}> = ({ strategy, setStrategy, projectId, environment, editable }) => {
|
permission?: string | string[];
|
||||||
|
}> = ({
|
||||||
|
strategy,
|
||||||
|
setStrategy,
|
||||||
|
projectId,
|
||||||
|
environment,
|
||||||
|
editable,
|
||||||
|
permission = UPDATE_FEATURE_ENVIRONMENT_VARIANTS,
|
||||||
|
}) => {
|
||||||
const { trackEvent } = usePlausibleTracker();
|
const { trackEvent } = usePlausibleTracker();
|
||||||
const [variantsEdit, setVariantsEdit] = useState<IFeatureVariantEdit[]>([]);
|
const [variantsEdit, setVariantsEdit] = useState<IFeatureVariantEdit[]>([]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
@ -153,7 +161,7 @@ export const StrategyVariants: FC<{
|
|||||||
<PermissionButton
|
<PermissionButton
|
||||||
onClick={addVariant}
|
onClick={addVariant}
|
||||||
variant='outlined'
|
variant='outlined'
|
||||||
permission={UPDATE_FEATURE_ENVIRONMENT_VARIANTS}
|
permission={permission}
|
||||||
projectId={projectId}
|
projectId={projectId}
|
||||||
environmentId={environment}
|
environmentId={environment}
|
||||||
data-testid='ADD_STRATEGY_VARIANT_BUTTON'
|
data-testid='ADD_STRATEGY_VARIANT_BUTTON'
|
||||||
|
@ -6,6 +6,7 @@ import { PageContent } from 'component/common/PageContent/PageContent';
|
|||||||
import { PageHeader } from 'component/common/PageHeader/PageHeader';
|
import { PageHeader } from 'component/common/PageHeader/PageHeader';
|
||||||
import {
|
import {
|
||||||
PROJECT_DEFAULT_STRATEGY_READ,
|
PROJECT_DEFAULT_STRATEGY_READ,
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
UPDATE_PROJECT,
|
UPDATE_PROJECT,
|
||||||
} from 'component/providers/AccessProvider/permissions';
|
} from 'component/providers/AccessProvider/permissions';
|
||||||
import { Alert, styled } from '@mui/material';
|
import { Alert, styled } from '@mui/material';
|
||||||
@ -29,7 +30,14 @@ export const ProjectDefaultStrategySettings = () => {
|
|||||||
usePageTitle(`Project default strategy configuration – ${projectName}`);
|
usePageTitle(`Project default strategy configuration – ${projectName}`);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!hasAccess([UPDATE_PROJECT, PROJECT_DEFAULT_STRATEGY_READ], projectId)
|
!hasAccess(
|
||||||
|
[
|
||||||
|
UPDATE_PROJECT,
|
||||||
|
PROJECT_DEFAULT_STRATEGY_READ,
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
|
],
|
||||||
|
projectId,
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
return (
|
return (
|
||||||
<PageContent
|
<PageContent
|
||||||
|
@ -6,7 +6,7 @@ import { useStrategy } from 'hooks/api/getters/useStrategy/useStrategy';
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { formatUnknownError } from 'utils/formatUnknownError';
|
import { formatUnknownError } from 'utils/formatUnknownError';
|
||||||
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
||||||
import { UPDATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/permissions';
|
import { PROJECT_DEFAULT_STRATEGY_WRITE } from 'component/providers/AccessProvider/permissions';
|
||||||
import type { IStrategy } from 'interfaces/strategy';
|
import type { IStrategy } from 'interfaces/strategy';
|
||||||
import { useRequiredQueryParam } from 'hooks/useRequiredQueryParam';
|
import { useRequiredQueryParam } from 'hooks/useRequiredQueryParam';
|
||||||
import type { ISegment } from 'interfaces/segment';
|
import type { ISegment } from 'interfaces/segment';
|
||||||
@ -19,6 +19,7 @@ import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
|
|||||||
import { ProjectDefaultStrategyForm } from './ProjectDefaultStrategyForm';
|
import { ProjectDefaultStrategyForm } from './ProjectDefaultStrategyForm';
|
||||||
import type { CreateFeatureStrategySchema } from 'openapi';
|
import type { CreateFeatureStrategySchema } from 'openapi';
|
||||||
import useProjectOverview from 'hooks/api/getters/useProjectOverview/useProjectOverview';
|
import useProjectOverview from 'hooks/api/getters/useProjectOverview/useProjectOverview';
|
||||||
|
import { UPDATE_PROJECT } from '@server/types/permissions';
|
||||||
|
|
||||||
export const useDefaultStrategy = (
|
export const useDefaultStrategy = (
|
||||||
projectId: string,
|
projectId: string,
|
||||||
@ -154,7 +155,7 @@ const EditDefaultStrategy = () => {
|
|||||||
environmentId={environmentId}
|
environmentId={environmentId}
|
||||||
onSubmit={onSubmit}
|
onSubmit={onSubmit}
|
||||||
loading={loading}
|
loading={loading}
|
||||||
permission={UPDATE_FEATURE_STRATEGY}
|
permission={[PROJECT_DEFAULT_STRATEGY_WRITE, UPDATE_PROJECT]}
|
||||||
errors={errors}
|
errors={errors}
|
||||||
isChangeRequest={false}
|
isChangeRequest={false}
|
||||||
/>
|
/>
|
||||||
|
@ -21,11 +21,15 @@ import { FeatureStrategyConstraints } from 'component/feature/FeatureStrategy/Fe
|
|||||||
import { FeatureStrategyType } from 'component/feature/FeatureStrategy/FeatureStrategyType/FeatureStrategyType';
|
import { FeatureStrategyType } from 'component/feature/FeatureStrategy/FeatureStrategyType/FeatureStrategyType';
|
||||||
import { FeatureStrategyTitle } from 'component/feature/FeatureStrategy/FeatureStrategyForm/FeatureStrategyTitle/FeatureStrategyTitle';
|
import { FeatureStrategyTitle } from 'component/feature/FeatureStrategy/FeatureStrategyForm/FeatureStrategyTitle/FeatureStrategyTitle';
|
||||||
import { StrategyVariants } from 'component/feature/StrategyTypes/StrategyVariants';
|
import { StrategyVariants } from 'component/feature/StrategyTypes/StrategyVariants';
|
||||||
|
import {
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
|
UPDATE_PROJECT,
|
||||||
|
} from '@server/types/permissions';
|
||||||
|
|
||||||
interface IProjectDefaultStrategyFormProps {
|
interface IProjectDefaultStrategyFormProps {
|
||||||
projectId: string;
|
projectId: string;
|
||||||
environmentId: string;
|
environmentId: string;
|
||||||
permission: string;
|
permission: string | string[];
|
||||||
onSubmit: () => void;
|
onSubmit: () => void;
|
||||||
onCancel?: () => void;
|
onCancel?: () => void;
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
@ -186,6 +190,10 @@ export const ProjectDefaultStrategyForm = ({
|
|||||||
setStrategy={setStrategy}
|
setStrategy={setStrategy}
|
||||||
environment={environmentId}
|
environment={environmentId}
|
||||||
projectId={projectId}
|
projectId={projectId}
|
||||||
|
permission={[
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
|
UPDATE_PROJECT,
|
||||||
|
]}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
||||||
import { StrategyItemContainer } from 'component/common/StrategyItemContainer/StrategyItemContainer';
|
import { StrategyItemContainer } from 'component/common/StrategyItemContainer/StrategyItemContainer';
|
||||||
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
|
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
|
||||||
import { UPDATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/permissions';
|
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import Edit from '@mui/icons-material/Edit';
|
import Edit from '@mui/icons-material/Edit';
|
||||||
import { StrategyExecution } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyExecution/StrategyExecution';
|
import { StrategyExecution } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyExecution/StrategyExecution';
|
||||||
import type { ProjectEnvironmentType } from 'interfaces/environments';
|
import type { ProjectEnvironmentType } from 'interfaces/environments';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import type { CreateFeatureStrategySchema } from 'openapi';
|
import type { CreateFeatureStrategySchema } from 'openapi';
|
||||||
|
import {
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
|
UPDATE_PROJECT,
|
||||||
|
} from '@server/types/permissions';
|
||||||
|
|
||||||
interface ProjectEnvironmentDefaultStrategyProps {
|
interface ProjectEnvironmentDefaultStrategyProps {
|
||||||
environment: ProjectEnvironmentType;
|
environment: ProjectEnvironmentType;
|
||||||
@ -59,7 +62,10 @@ const ProjectEnvironmentDefaultStrategy = ({
|
|||||||
actions={
|
actions={
|
||||||
<>
|
<>
|
||||||
<PermissionIconButton
|
<PermissionIconButton
|
||||||
permission={UPDATE_FEATURE_STRATEGY}
|
permission={[
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
|
UPDATE_PROJECT,
|
||||||
|
]}
|
||||||
environmentId={environmentId}
|
environmentId={environmentId}
|
||||||
projectId={projectId}
|
projectId={projectId}
|
||||||
component={Link}
|
component={Link}
|
||||||
|
@ -5,6 +5,7 @@ import {
|
|||||||
type IUnleashServices,
|
type IUnleashServices,
|
||||||
serializeDates,
|
serializeDates,
|
||||||
UPDATE_PROJECT,
|
UPDATE_PROJECT,
|
||||||
|
PROJECT_DEFAULT_STRATEGY_WRITE,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import type { Logger } from '../../logger';
|
import type { Logger } from '../../logger';
|
||||||
import type EnvironmentService from './environment-service';
|
import type EnvironmentService from './environment-service';
|
||||||
@ -105,7 +106,7 @@ export default class EnvironmentsController extends Controller {
|
|||||||
method: 'post',
|
method: 'post',
|
||||||
path: `${PREFIX}/:environment/default-strategy`,
|
path: `${PREFIX}/:environment/default-strategy`,
|
||||||
handler: this.updateDefaultStrategyForProjectEnvironment,
|
handler: this.updateDefaultStrategyForProjectEnvironment,
|
||||||
permission: UPDATE_PROJECT,
|
permission: [UPDATE_PROJECT, PROJECT_DEFAULT_STRATEGY_WRITE],
|
||||||
middleware: [
|
middleware: [
|
||||||
openApiService.validPath({
|
openApiService.validPath({
|
||||||
tags: ['Projects'],
|
tags: ['Projects'],
|
||||||
|
Loading…
Reference in New Issue
Block a user