diff --git a/packages/core/admin/admin/src/constants.js b/packages/core/admin/admin/src/constants.js new file mode 100644 index 0000000000..e20e93253f --- /dev/null +++ b/packages/core/admin/admin/src/constants.js @@ -0,0 +1,90 @@ +export const ADMIN_PERMISSIONS_CE = { + contentManager: { + main: [], + collectionTypesConfigurations: [ + { + action: 'plugin::content-manager.collection-types.configure-view', + subject: null, + }, + ], + componentsConfigurations: [ + { + action: 'plugin::content-manager.components.configure-layout', + subject: null, + }, + ], + singleTypesConfigurations: [ + { + action: 'plugin::content-manager.single-types.configure-view', + subject: null, + }, + ], + }, + marketplace: { + main: [{ action: 'admin::marketplace.read', subject: null }], + read: [{ action: 'admin::marketplace.read', subject: null }], + }, + settings: { + roles: { + main: [ + { action: 'admin::roles.create', subject: null }, + { action: 'admin::roles.update', subject: null }, + { action: 'admin::roles.read', subject: null }, + { action: 'admin::roles.delete', subject: null }, + ], + create: [{ action: 'admin::roles.create', subject: null }], + delete: [{ action: 'admin::roles.delete', subject: null }], + read: [{ action: 'admin::roles.read', subject: null }], + update: [{ action: 'admin::roles.update', subject: null }], + }, + users: { + main: [ + { action: 'admin::users.create', subject: null }, + { action: 'admin::users.read', subject: null }, + { action: 'admin::users.update', subject: null }, + { action: 'admin::users.delete', subject: null }, + ], + create: [{ action: 'admin::users.create', subject: null }], + delete: [{ action: 'admin::users.delete', subject: null }], + read: [{ action: 'admin::users.read', subject: null }], + update: [{ action: 'admin::users.update', subject: null }], + }, + webhooks: { + main: [ + { action: 'admin::webhooks.create', subject: null }, + { action: 'admin::webhooks.read', subject: null }, + { action: 'admin::webhooks.update', subject: null }, + { action: 'admin::webhooks.delete', subject: null }, + ], + create: [{ action: 'admin::webhooks.create', subject: null }], + delete: [{ action: 'admin::webhooks.delete', subject: null }], + read: [ + { action: 'admin::webhooks.read', subject: null }, + // NOTE: We need to check with the API + { action: 'admin::webhooks.update', subject: null }, + { action: 'admin::webhooks.delete', subject: null }, + ], + update: [{ action: 'admin::webhooks.update', subject: null }], + }, + 'api-tokens': { + main: [{ action: 'admin::api-tokens.access', subject: null }], + create: [{ action: 'admin::api-tokens.create', subject: null }], + delete: [{ action: 'admin::api-tokens.delete', subject: null }], + read: [{ action: 'admin::api-tokens.read', subject: null }], + update: [{ action: 'admin::api-tokens.update', subject: null }], + regenerate: [{ action: 'admin::api-tokens.regenerate', subject: null }], + }, + 'transfer-tokens': { + main: [{ action: 'admin::transfer.tokens.access', subject: null }], + create: [{ action: 'admin::transfer.tokens.create', subject: null }], + delete: [{ action: 'admin::transfer.tokens.delete', subject: null }], + read: [{ action: 'admin::transfer.tokens.read', subject: null }], + update: [{ action: 'admin::transfer.tokens.update', subject: null }], + regenerate: [{ action: 'admin::transfer.tokens.regenerate', subject: null }], + }, + 'project-settings': { + read: [{ action: 'admin::project-settings.read', subject: null }], + update: [{ action: 'admin::project-settings.update', subject: null }], + }, + }, + }; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/index.js b/packages/core/admin/admin/src/content-manager/pages/App/index.js index 0f94e8b73a..cfbc1cd318 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/index.js @@ -10,10 +10,11 @@ import { import sortBy from 'lodash/sortBy'; import { Helmet } from 'react-helmet'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; import { Redirect, Route, Switch, useLocation, useRouteMatch } from 'react-router-dom'; import { DragLayer } from '../../../components/DragLayer'; -import permissions from '../../../permissions'; +import { selectAdminPermissions } from '../../../pages/App/selectors'; import ModelsContext from '../../contexts/ModelsContext'; import getTrad from '../../utils/getTrad'; import ItemTypes from '../../utils/ItemTypes'; @@ -29,8 +30,6 @@ import { RelationDragPreview } from './components/RelationDragPreview'; import LeftMenu from './LeftMenu'; import useContentManagerInitData from './useContentManagerInitData'; -const cmPermissions = permissions.contentManager; - function renderDraglayerItem({ type, item }) { if ([ItemTypes.EDIT_FIELD, ItemTypes.FIELD].includes(type)) { return ; @@ -73,6 +72,7 @@ const App = () => { const { formatMessage } = useIntl(); const { startSection } = useGuidedTour(); const startSectionRef = useRef(startSection); + const permissions = useSelector(selectAdminPermissions); useEffect(() => { if (startSectionRef.current) { @@ -127,7 +127,7 @@ const App = () => { - + diff --git a/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js b/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js index 412d06a388..b79d2698e6 100644 --- a/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js @@ -3,9 +3,10 @@ import React, { memo, useMemo } from 'react'; import { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { ErrorBoundary } from 'react-error-boundary'; +import { useSelector } from 'react-redux'; import { Route, Switch } from 'react-router-dom'; -import permissions from '../../../permissions'; +import { selectAdminPermissions } from '../../../pages/App/selectors'; import { ContentTypeLayoutContext } from '../../contexts'; import { useFetchContentTypeLayout } from '../../hooks'; import { formatLayoutToApi } from '../../utils'; @@ -16,14 +17,13 @@ import ListViewLayout from '../ListViewLayoutManager'; import ErrorFallback from './components/ErrorFallback'; -const cmPermissions = permissions.contentManager; - const CollectionTypeRecursivePath = ({ match: { params: { slug }, url, }, }) => { + const permissions = useSelector(selectAdminPermissions); const { isLoading, layout, updateLayout } = useFetchContentTypeLayout(slug); const { rawContentTypeLayout, rawComponentsLayouts } = useMemo(() => { @@ -92,7 +92,9 @@ const CollectionTypeRecursivePath = ({ - + - + { const [{ isLoading, data: layout }, dispatch] = useReducer(crudReducer, crudInitialState); const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []); const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual); + const permissions = useSelector(selectAdminPermissions); const { uid } = useParams(); const { get } = useFetchClient(); @@ -54,7 +53,7 @@ const ComponentSettingsView = () => { } return ( - + ); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/index.js index 3b4df1a7ad..ce0009bfd0 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/index.js @@ -13,7 +13,7 @@ import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { useSelector } from 'react-redux'; -import permissions from '../../../permissions'; +import { selectAdminPermissions } from '../../../pages/App/selectors'; import { InjectionZone } from '../../../shared/components'; import CollectionTypeFormWrapper from '../../components/CollectionTypeFormWrapper'; import { DynamicZone } from '../../components/DynamicZone'; @@ -29,14 +29,14 @@ import Header from './Header'; import { selectAttributesLayout, selectCurrentLayout, selectCustomFieldUids } from './selectors'; import { getFieldsActionMatchingPermissions } from './utils'; -const cmPermissions = permissions.contentManager; -const ctbPermissions = [{ action: 'plugin::content-type-builder.read', subject: null }]; +// TODO: this seems suspicious +const CTB_PERMISSIONS = [{ action: 'plugin::content-type-builder.read', subject: null }]; /* eslint-disable react/no-array-index-key */ const EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, userPermissions }) => { const { trackUsage } = useTracking(); const { formatMessage } = useIntl(); - + const permissions = useSelector(selectAdminPermissions); const { layout, formattedContentTypeLayout, customFieldUids } = useSelector((state) => ({ layout: selectCurrentLayout(state), formattedContentTypeLayout: selectAttributesLayout(state), @@ -49,8 +49,8 @@ const EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, user getFieldsActionMatchingPermissions(userPermissions, slug); const configurationPermissions = isSingleType - ? cmPermissions.singleTypesConfigurations - : cmPermissions.collectionTypesConfigurations; + ? permissions.contentManager.singleTypesConfigurations + : permissions.contentManager.collectionTypesConfigurations; // // FIXME when changing the routing const configurationsURL = `/content-manager/${ @@ -188,7 +188,7 @@ const EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, user {slug !== 'strapi::administrator' && ( - + { trackUsage('willEditEditLayout'); diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/index.js b/packages/core/admin/admin/src/content-manager/pages/ListView/index.js index a975000e89..15ed34d8a9 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/index.js @@ -31,12 +31,12 @@ import PropTypes from 'prop-types'; import { stringify } from 'qs'; import { useIntl } from 'react-intl'; import { useMutation } from 'react-query'; -import { connect } from 'react-redux'; +import { connect, useSelector } from 'react-redux'; import { Link as ReactRouterLink, useHistory, useLocation } from 'react-router-dom'; import { bindActionCreators, compose } from 'redux'; import styled from 'styled-components'; -import permissions from '../../../permissions'; +import { selectAdminPermissions } from '../../../pages/App/selectors'; import { InjectionZone } from '../../../shared/components'; import AttributeFilter from '../../components/AttributeFilter'; import DynamicTable from '../../components/DynamicTable'; @@ -48,8 +48,6 @@ import PaginationFooter from './PaginationFooter'; import makeSelectListView from './selectors'; import { buildQueryString } from './utils'; -const cmPermissions = permissions.contentManager; - const ConfigureLayoutBox = styled(Box)` svg { path { @@ -85,6 +83,7 @@ function ListView({ const fetchPermissionsRef = useRef(refetchPermissions); const { notifyStatus } = useNotifyAT(); const { formatAPIError } = useAPIErrorHandler(getTrad); + const permissions = useSelector(selectAdminPermissions); useFocusWhenNavigate(); @@ -391,7 +390,9 @@ function ListView({ <> - + { diff --git a/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js b/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js index f13304e8b4..9d60e248af 100644 --- a/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js @@ -2,23 +2,23 @@ import React, { memo, useMemo } from 'react'; import { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; +import { useSelector } from 'react-redux'; import { Route, Switch } from 'react-router-dom'; -import permissions from '../../../permissions'; +import { selectAdminPermissions } from '../../../pages/App/selectors'; import { ContentTypeLayoutContext } from '../../contexts'; import { useFetchContentTypeLayout } from '../../hooks'; import { formatLayoutToApi } from '../../utils'; import EditSettingsView from '../EditSettingsView'; import EditViewLayoutManager from '../EditViewLayoutManager'; -const cmPermissions = permissions.contentManager; - const SingleTypeRecursivePath = ({ match: { params: { slug }, url, }, }) => { + const permissions = useSelector(selectAdminPermissions); const { isLoading, layout, updateLayout } = useFetchContentTypeLayout(slug); const { rawContentTypeLayout, rawComponentsLayouts } = useMemo(() => { @@ -48,7 +48,7 @@ const SingleTypeRecursivePath = ({ - + @@ -35,6 +38,14 @@ const AuthenticatedApp = lazy(() => ); function App() { + const adminPermissions = useEnterprise(ADMIN_PERMISSIONS_CE, async () => (await import('../../../../ee/admin/constants')).ADMIN_PERMISSIONS_EE, { + combine(cePermissions, eePermissions) { + // the `settings` NS e.g. are deep nested objects, that need a deep merge + return merge({}, cePermissions, eePermissions); + }, + + defaultValue: ADMIN_PERMISSIONS_CE, + }) const routes = useEnterprise( ROUTES_CE, async () => (await import('../../../../ee/admin/pages/App/constants')).ROUTES_EE, @@ -49,6 +60,7 @@ function App() { isLoading: true, hasAdmin: false, }); + const dispatch = useDispatch(); const appInfo = useAppInfo(); const { get, post } = useFetchClient(); @@ -60,6 +72,10 @@ function App() { const [telemetryProperties, setTelemetryProperties] = useState(null); + useEffect(() => { + dispatch({ type: SET_ADMIN_PERMISSIONS, payload: adminPermissions }); + }, [adminPermissions, dispatch]); + useEffect(() => { const currentToken = auth.getToken(); diff --git a/packages/core/admin/admin/src/pages/App/reducer.js b/packages/core/admin/admin/src/pages/App/reducer.js index 117ed9f6d8..76c127f9e6 100644 --- a/packages/core/admin/admin/src/pages/App/reducer.js +++ b/packages/core/admin/admin/src/pages/App/reducer.js @@ -1,8 +1,9 @@ import produce from 'immer'; -import { SET_APP_RUNTIME_STATUS } from './constants'; +import { SET_APP_RUNTIME_STATUS, SET_ADMIN_PERMISSIONS } from './constants'; const initialState = { + permissions: {}, status: 'init', }; @@ -14,6 +15,12 @@ const reducer = (state = initialState, action) => draftState.status = 'runtime'; break; } + + case SET_ADMIN_PERMISSIONS: { + draftState.permissions = action.payload; + break; + } + default: return draftState; } diff --git a/packages/core/admin/admin/src/pages/App/selectors.js b/packages/core/admin/admin/src/pages/App/selectors.js new file mode 100644 index 0000000000..5b65996e0c --- /dev/null +++ b/packages/core/admin/admin/src/pages/App/selectors.js @@ -0,0 +1,12 @@ +import { createSelector } from 'reselect'; + +import { initialState } from './reducer'; + +const selectAppDomain = () => (state) => { + return state.admin_app || initialState; +}; + +export const selectAdminPermissions = createSelector( + selectAppDomain(), + (state) => state.permissions +); diff --git a/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js b/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js index f158486493..8eceeeebcb 100644 --- a/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js +++ b/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js @@ -3,21 +3,24 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; import { Helmet } from 'react-helmet'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../permissions'; +import { selectAdminPermissions } from '../App/selectors'; import Plugins from './Plugins'; const InstalledPluginsPage = () => { const { formatMessage } = useIntl(); - const title = formatMessage({ - id: 'global.plugins', - defaultMessage: 'Plugins', - }); + const permissions = useSelector(selectAdminPermissions); return ( - - + + ); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/index.js index ec2b3ceda1..069e0b2243 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/index.js @@ -23,10 +23,11 @@ import { } from '@strapi/helper-plugin'; import { Helmet } from 'react-helmet'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; import useDebounce from '../../hooks/useDebounce'; import useNavigatorOnLine from '../../hooks/useNavigatorOnLine'; -import adminPermissions from '../../permissions'; +import { selectAdminPermissions } from '../App/selectors'; import MissingPluginBanner from './components/MissingPluginBanner'; import NpmPackagesFilters from './components/NpmPackagesFilters'; @@ -249,11 +250,15 @@ const MarketPlacePage = () => { ); }; -const ProtectedMarketPlace = () => ( - - - -); +const ProtectedMarketPlace = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export { MarketPlacePage }; export default ProtectedMarketPlace; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js index 06481fe9be..6d48006a71 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js @@ -15,11 +15,12 @@ import { import { Formik } from 'formik'; import { useIntl } from 'react-intl'; import { useQuery } from 'react-query'; +import { useSelector } from 'react-redux'; import { useHistory, useRouteMatch } from 'react-router-dom'; import { ApiTokenPermissionsContextProvider } from '../../../../../contexts/ApiTokenPermissions'; -import adminPermissions from '../../../../../permissions'; import { formatAPIErrors } from '../../../../../utils'; +import { selectAdminPermissions } from '../../../../App/selectors'; import { API_TOKEN_TYPE } from '../../../components/Tokens/constants'; import FormHead from '../../../components/Tokens/FormHead'; import TokenBox from '../../../components/Tokens/TokenBox'; @@ -39,6 +40,7 @@ const ApiTokenCreateView = () => { const { lockApp, unlockApp } = useOverlayBlocker(); const toggleNotification = useNotification(); const history = useHistory(); + const permissions = useSelector(selectAdminPermissions); const [apiToken, setApiToken] = useState( history.location.state?.apiToken.accessKey ? { @@ -51,7 +53,7 @@ const ApiTokenCreateView = () => { const { setCurrentStep } = useGuidedTour(); const { allowedActions: { canCreate, canUpdate, canRegenerate }, - } = useRBAC(adminPermissions.settings['api-tokens']); + } = useRBAC(permissions.settings['api-tokens']); const [state, dispatch] = useReducer(reducer, initialState, (state) => init(state, {})); const { params: { id }, diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js index f54788c6d4..54878a8d20 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js @@ -17,9 +17,10 @@ import { Plus } from '@strapi/icons'; import qs from 'qs'; import { useIntl } from 'react-intl'; import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import { API_TOKEN_TYPE } from '../../../components/Tokens/constants'; import Table from '../../../components/Tokens/Table'; @@ -30,9 +31,10 @@ const ApiTokenListView = () => { const queryClient = useQueryClient(); const { formatMessage } = useIntl(); const toggleNotification = useNotification(); + const permissions = useSelector(selectAdminPermissions); const { allowedActions: { canCreate, canDelete, canUpdate, canRead }, - } = useRBAC(adminPermissions.settings['api-tokens']); + } = useRBAC(permissions.settings['api-tokens']); const { push } = useHistory(); const { trackUsage } = useTracking(); const { startSection } = useGuidedTour(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js index 2360543456..eed05d3f8d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js @@ -1,13 +1,16 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditView from '../EditView'; const ProtectedApiTokenCreateView = () => { + const permissions = useSelector(selectAdminPermissions); + return ( - + ); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js index 1fae7471f6..4f3a16ddaa 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js @@ -1,13 +1,16 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditView from '../EditView'; const ProtectedApiTokenCreateView = () => { + const permissions = useSelector(selectAdminPermissions); + return ( - + ); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js index 6483ef73c7..400264279a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import ListView from '../ListView'; -const ProtectedApiTokenListView = () => ( - - - -); +const ProtectedApiTokenListView = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedApiTokenListView; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js index 0ffbb6b3d8..eefb87ccb0 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js @@ -24,9 +24,10 @@ import { Check, ExternalLink } from '@strapi/icons'; import AdminSeatInfo from 'ee_else_ce/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo'; import { useIntl } from 'react-intl'; import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { useSelector } from 'react-redux'; import { useConfigurations } from '../../../../hooks'; -import adminPermissions from '../../../../permissions'; +import { selectAdminPermissions } from '../../../App/selectors'; import CustomizationInfos from './components/CustomizationInfos'; import { fetchProjectSettings, postProjectSettings } from './utils/api'; @@ -39,13 +40,19 @@ const ApplicationInfosPage = () => { const { formatMessage } = useIntl(); const queryClient = useQueryClient(); useFocusWhenNavigate(); - const appInfos = useAppInfo(); - const { latestStrapiReleaseTag, shouldUpdateStrapi, strapiVersion } = appInfos; + const { + communityEdition, + latestStrapiReleaseTag, + nodeVersion, + shouldUpdateStrapi, + strapiVersion, + } = useAppInfo(); const { updateProjectSettings } = useConfigurations(); + const permissions = useSelector(selectAdminPermissions); const { allowedActions: { canRead, canUpdate }, - } = useRBAC(adminPermissions.settings['project-settings']); + } = useRBAC(permissions.settings['project-settings']); const canSubmit = canRead && canUpdate; const { data } = useQuery('project-settings', fetchProjectSettings, { enabled: canRead }); @@ -174,7 +181,7 @@ const ApplicationInfosPage = () => { defaultMessage: '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}', }, - { communityEdition: appInfos.communityEdition } + { communityEdition } )} { defaultMessage: 'node version', })} - {appInfos.nodeVersion} + {nodeVersion} diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js index a14b1456bc..a08ec83adc 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js @@ -30,11 +30,12 @@ import { Formik } from 'formik'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; import { useHistory, useRouteMatch } from 'react-router-dom'; import styled from 'styled-components'; import { useFetchPermissionsLayout, useFetchRole } from '../../../../../hooks'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import Permissions from '../EditPage/components/Permissions'; import schema from './utils/schema'; @@ -61,7 +62,6 @@ const CreatePage = () => { const id = get(params, 'params.id', null); const { isLoading: isLayoutLoading, data: permissionsLayout } = useFetchPermissionsLayout(); const { permissions: rolePermissions, isLoading: isRoleLoading } = useFetchRole(id); - const { post, put } = useFetchClient(); const handleCreateRoleSubmit = (data) => { @@ -257,8 +257,10 @@ const CreatePage = () => { }; export default function () { + const permissions = useSelector(selectAdminPermissions); + return ( - + ); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js index a559521381..5169bf507f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js @@ -31,10 +31,11 @@ import { import { Duplicate, Pencil, Plus, Trash } from '@strapi/icons'; import get from 'lodash/get'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { useRolesList } from '../../../../../hooks'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EmptyRole from './components/EmptyRole'; import BaseRoleRow from './components/RoleRow'; @@ -43,10 +44,11 @@ import reducer, { initialState } from './reducer'; const useSortedRoles = () => { useFocusWhenNavigate(); const { locale } = useIntl(); + const permissions = useSelector(selectAdminPermissions); const { isLoading: isLoadingForPermissions, allowedActions: { canCreate, canDelete, canRead, canUpdate }, - } = useRBAC(adminPermissions.settings.roles); + } = useRBAC(permissions.settings.roles); const { getData, roles, isLoading } = useRolesList(false); const [{ query }] = useQueryParams(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js index f4ab8ecb2f..2940296a4e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js @@ -1,23 +1,21 @@ -import React, { useMemo } from 'react'; +import React from 'react'; import { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; import { Redirect } from 'react-router-dom'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditPage from '../EditPage'; const ProtectedEditPage = () => { - const permissions = useMemo(() => { - return { - read: adminPermissions.settings.roles.read, - update: adminPermissions.settings.roles.update, - }; - }, []); - + const permissions = useSelector(selectAdminPermissions); const { isLoading, allowedActions: { canRead, canUpdate }, - } = useRBAC(permissions); + } = useRBAC({ + read: permissions.settings.roles.read, + update: permissions.settings.roles.update, + }); if (isLoading) { return ; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js index 084fa74caf..f21f728f84 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import ListPage from '../ListPage'; -const ProtectedListPage = () => ( - - - -); +const ProtectedListPage = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedListPage; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js index feed282045..0a19d390bc 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js @@ -16,10 +16,11 @@ import { import { Formik } from 'formik'; import { useIntl } from 'react-intl'; import { useQuery } from 'react-query'; +import { useSelector } from 'react-redux'; import { useHistory, useRouteMatch } from 'react-router-dom'; -import adminPermissions from '../../../../../permissions'; import { formatAPIErrors } from '../../../../../utils'; +import { selectAdminPermissions } from '../../../../App/selectors'; import { TRANSFER_TOKEN_TYPE } from '../../../components/Tokens/constants'; import FormHead from '../../../components/Tokens/FormHead'; import TokenBox from '../../../components/Tokens/TokenBox'; @@ -46,9 +47,10 @@ const TransferTokenCreateView = () => { const { trackUsage } = useTracking(); const trackUsageRef = useRef(trackUsage); const { setCurrentStep } = useGuidedTour(); + const permissions = useSelector(selectAdminPermissions); const { allowedActions: { canCreate, canUpdate, canRegenerate }, - } = useRBAC(adminPermissions.settings['transfer-tokens']); + } = useRBAC(permissions.settings['transfer-tokens']); const { params: { id }, } = useRouteMatch('/settings/transfer-tokens/:id'); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js index ea9f76a8ba..4f8e357ae8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js @@ -17,9 +17,10 @@ import { Plus } from '@strapi/icons'; import qs from 'qs'; import { useIntl } from 'react-intl'; import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import { TRANSFER_TOKEN_TYPE } from '../../../components/Tokens/constants'; import Table from '../../../components/Tokens/Table'; @@ -30,9 +31,10 @@ const TransferTokenListView = () => { const queryClient = useQueryClient(); const { formatMessage } = useIntl(); const toggleNotification = useNotification(); + const permissions = useSelector(selectAdminPermissions); const { allowedActions: { canCreate, canDelete, canUpdate, canRead }, - } = useRBAC(adminPermissions.settings['transfer-tokens']); + } = useRBAC(permissions.settings['transfer-tokens']); const { push } = useHistory(); const { trackUsage } = useTracking(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js index f4a5b17af7..aee2a1b38e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js @@ -1,13 +1,16 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditView from '../EditView'; const ProtectedTransferTokenCreateView = () => { + const permissions = useSelector(selectAdminPermissions); + return ( - + ); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js index ff665e31d3..758461eec4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js @@ -1,13 +1,16 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditView from '../EditView'; const ProtectedTransferTokenCreateView = () => { + const permissions = useSelector(selectAdminPermissions); + return ( - + ); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js index f2a00b43c8..d88329ff9d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import ListView from '../ListView'; -const ProtectedTransferTokenListView = () => ( - - - -); +const ProtectedTransferTokenListView = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedTransferTokenListView; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js index fb60fdbd35..02285f8520 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js @@ -17,10 +17,11 @@ import CreateAction from 'ee_else_ce/pages/SettingsPage/pages/Users/ListPage/Cre import qs from 'qs'; import { useIntl } from 'react-intl'; import { useMutation, useQueryClient } from 'react-query'; +import { useSelector } from 'react-redux'; import { useLocation } from 'react-router-dom'; import { useAdminUsers } from '../../../../../hooks/useAdminUsers'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import Filters from '../../../components/Filters'; import TableRows from './DynamicTable/TableRows'; @@ -35,9 +36,10 @@ const ListPage = () => { const { post } = useFetchClient(); const { formatAPIError } = useAPIErrorHandler(); const [isModalOpened, setIsModalOpen] = useState(false); + const permissions = useSelector(selectAdminPermissions); const { allowedActions: { canCreate, canDelete, canRead }, - } = useRBAC(adminPermissions.settings.users); + } = useRBAC(permissions.settings.users); const queryClient = useQueryClient(); const toggleNotification = useNotification(); const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js index c74c2c35bb..cae2a08a6c 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js @@ -1,24 +1,22 @@ -import React, { useEffect, useMemo } from 'react'; +import React, { useEffect } from 'react'; import { LoadingIndicatorPage, useNotification, useRBAC } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; import { Redirect, useLocation } from 'react-router-dom'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditPage from '../EditPage'; const ProtectedEditPage = () => { const toggleNotification = useNotification(); - const permissions = useMemo(() => { - return { - read: adminPermissions.settings.users.read, - update: adminPermissions.settings.users.update, - }; - }, []); - + const permissions = useSelector(selectAdminPermissions); const { isLoading, allowedActions: { canRead, canUpdate }, - } = useRBAC(permissions); + } = useRBAC({ + read: permissions.settings.users.read, + update: permissions.settings.users.update, + }); const { state } = useLocation(); const from = state?.from ?? '/'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js index 99d2953665..c98305e282 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import ListPage from '../ListPage'; -const ProtectedListPage = () => ( - - - -); +const ProtectedListPage = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedListPage; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js index 6898a6d9e6..aa95ac793d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js @@ -41,14 +41,15 @@ import { import { EmptyDocuments, Pencil, Plus, Trash } from '@strapi/icons'; import { useIntl } from 'react-intl'; import { useMutation, useQuery } from 'react-query'; +import { useSelector } from 'react-redux'; import { useHistory, useLocation } from 'react-router-dom'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; const ListView = () => { const [showModal, setShowModal] = useState(false); const [webhooksToDelete, setWebhooksToDelete] = useState([]); - + const permissions = useSelector(selectAdminPermissions); const { formatMessage } = useIntl(); const { formatAPIError } = useAPIErrorHandler(); const toggleNotification = useNotification(); @@ -59,7 +60,7 @@ const ListView = () => { const { isLoading: isRBACLoading, allowedActions: { canCreate, canUpdate, canDelete }, - } = useRBAC(adminPermissions.settings.webhooks); + } = useRBAC(permissions.settings.webhooks); const { get, post, put } = useFetchClient(); const { notifyStatus } = useNotifyAT(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js index 3537269de4..2381a4e6cd 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditView from '../EditView'; -const ProtectedCreateView = () => ( - - - -); +const ProtectedCreateView = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedCreateView; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js index ad58f51445..50da57e172 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import EditView from '../EditView'; -const ProtectedEditView = () => ( - - - -); +const ProtectedEditView = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedEditView; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js index 1c2b2a1c57..14a602394a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../permissions'; +import { selectAdminPermissions } from '../../../../App/selectors'; import ListView from '../ListView'; -const ProtectedListView = () => ( - - - -); +const ProtectedListView = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedListView; diff --git a/packages/core/admin/ee/admin/constants.js b/packages/core/admin/ee/admin/constants.js new file mode 100644 index 0000000000..bcd893ca8a --- /dev/null +++ b/packages/core/admin/ee/admin/constants.js @@ -0,0 +1,16 @@ +export const ADMIN_PERMISSIONS_EE = { + settings: { + auditLogs: { + main: [{ action: 'admin::audit-logs.read', subject: null }], + read: [{ action: 'admin::audit-logs.read', subject: null }], + }, + 'review-workflows': { + main: [{ action: 'admin::review-workflows.read', subject: null }], + }, + sso: { + main: [{ action: 'admin::provider-login.read', subject: null }], + read: [{ action: 'admin::provider-login.read', subject: null }], + update: [{ action: 'admin::provider-login.update', subject: null }], + }, + }, + }; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js index a28cb66581..c6c32a898c 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js @@ -17,9 +17,10 @@ import { useRBAC, } from '@strapi/helper-plugin'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; +import { selectAdminPermissions } from '../../../../../../../admin/src/pages/App/selectors'; import Filters from '../../../../../../../admin/src/pages/SettingsPage/components/Filters'; -import adminPermissions from '../../../../../../../admin/src/permissions'; import useAuditLogsData from './hooks/useAuditLogsData'; import Modal from './Modal'; @@ -28,17 +29,15 @@ import TableRows from './TableRows'; import getDisplayedFilters from './utils/getDisplayedFilters'; import tableHeaders from './utils/tableHeaders'; -const auditLogsPermissions = { - ...adminPermissions.settings.auditLogs, - readUsers: adminPermissions.settings.users.read, -}; - const ListView = () => { const { formatMessage } = useIntl(); - + const permissions = useSelector(selectAdminPermissions); const { allowedActions: { canRead: canReadAuditLogs, canReadUsers }, - } = useRBAC(auditLogsPermissions); + } = useRBAC({ + ...permissions.settings.auditLogs, + readUsers: permissions.settings.users.read, + }); const [{ query }, setQuery] = useQueryParams(); const { auditLogs, users, isLoading, hasError } = useAuditLogsData({ diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js index 6df441287a..60cd8e6e76 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js @@ -1,14 +1,19 @@ import React from 'react'; import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; -import adminPermissions from '../../../../../../../admin/src/permissions'; +import { selectAdminPermissions } from '../../../../../../../admin/src/pages/App/selectors'; import ListView from '../ListView'; -const ProtectedListPage = () => ( - - - -); +const ProtectedListPage = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedListPage; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ProtectedPage.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ProtectedPage.js new file mode 100644 index 0000000000..af3c999755 --- /dev/null +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ProtectedPage.js @@ -0,0 +1,20 @@ +import React from 'react'; + +import { CheckPagePermissions } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; + +import { selectAdminPermissions } from '../../../../../../admin/src/pages/App/selectors'; + +import { ReviewWorkflowsPage } from './ReviewWorkflows'; + +const ProtectedListPage = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; + +export default ProtectedListPage; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js index beaee8e358..e8d5225252 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js @@ -2,7 +2,6 @@ import React, { useEffect, useState } from 'react'; import { Button, ContentLayout, HeaderLayout, Layout, Loader, Main } from '@strapi/design-system'; import { - CheckPagePermissions, ConfirmDialog, SettingsPageTitle, useAPIErrorHandler, @@ -18,7 +17,6 @@ import { useDispatch, useSelector } from 'react-redux'; import { DragLayer } from '../../../../../../admin/src/components/DragLayer'; import { useInjectReducer } from '../../../../../../admin/src/hooks/useInjectReducer'; -import adminPermissions from '../../../../../../admin/src/permissions'; import { setWorkflows } from './actions'; import { StageDragPreview } from './components/StageDragPreview'; @@ -57,7 +55,6 @@ export function ReviewWorkflowsPage() { }, } = useSelector((state) => state?.[REDUX_NAMESPACE] ?? initialState); const [isConfirmDeleteDialogOpen, setIsConfirmDeleteDialogOpen] = useState(false); - const { mutateAsync, isLoading } = useMutation( async ({ workflowId, stages }) => { const { @@ -134,76 +131,74 @@ export function ReviewWorkflowsPage() { }, []); return ( - - - + +
+ + + +
+ } + type="submit" + size="M" + disabled={!currentWorkflowIsDirty} + // if the confirm dialog is open the loading state is on + // the confirm button already + loading={!isConfirmDeleteDialogOpen && isLoading} + > + {formatMessage({ + id: 'global.save', + defaultMessage: 'Save', + })} + + } + title={formatMessage({ + id: 'Settings.review-workflows.page.title', + defaultMessage: 'Review Workflows', + })} + subtitle={formatMessage( + { + id: 'Settings.review-workflows.page.subtitle', + defaultMessage: '{count, plural, one {# stage} other {# stages}}', + }, + { count: currentWorkflow?.stages?.length ?? 0 } + )} + /> + + {status === 'loading' && ( + + {formatMessage({ + id: 'Settings.review-workflows.page.isLoading', + defaultMessage: 'Workflow is loading', + })} + + )} + + + + +
+ + -
- - - -
- } - type="submit" - size="M" - disabled={!currentWorkflowIsDirty} - // if the confirm dialog is open the loading state is on - // the confirm button already - loading={!isConfirmDeleteDialogOpen && isLoading} - > - {formatMessage({ - id: 'global.save', - defaultMessage: 'Save', - })} - - } - title={formatMessage({ - id: 'Settings.review-workflows.page.title', - defaultMessage: 'Review Workflows', - })} - subtitle={formatMessage( - { - id: 'Settings.review-workflows.page.subtitle', - defaultMessage: '{count, plural, one {# stage} other {# stages}}', - }, - { count: currentWorkflow?.stages?.length ?? 0 } - )} - /> - - {status === 'loading' && ( - - {formatMessage({ - id: 'Settings.review-workflows.page.isLoading', - defaultMessage: 'Workflow is loading', - })} - - )} - - - - -
- - -
- - +
+
); } diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js index 0c4fb5ad53..a91f097f9d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js @@ -26,25 +26,25 @@ import { import { Check } from '@strapi/icons'; import isEqual from 'lodash/isEqual'; import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; import { useRolesList, useSettingsForm } from '../../../../../../admin/src/hooks'; -import adminPermissions from '../../../../../../admin/src/permissions'; +import { selectAdminPermissions } from '../../../../../../admin/src/pages/App/selectors'; import { getRequestUrl } from '../../../../../../admin/src/utils'; import schema from './utils/schema'; -const ssoPermissions = { - ...adminPermissions.settings.sso, - readRoles: adminPermissions.settings.roles.read, -}; - export const SingleSignOn = () => { const { formatMessage } = useIntl(); + const permissions = useSelector(selectAdminPermissions); const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate, canReadRoles }, - } = useRBAC(ssoPermissions); + } = useRBAC({ + ...permissions.settings.sso, + readRoles: permissions.settings.roles.read, + }); const [ { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader }, @@ -247,10 +247,14 @@ export const SingleSignOn = () => { ); }; -const ProtectedSSO = () => ( - - - -); +const ProtectedSSO = () => { + const permissions = useSelector(selectAdminPermissions); + + return ( + + + + ); +}; export default ProtectedSSO;