diff --git a/packages/strapi-admin/admin/src/containers/Admin/actions.js b/packages/strapi-admin/admin/src/containers/Admin/actions.js
index d44bc8be5b..83eae199d6 100644
--- a/packages/strapi-admin/admin/src/containers/Admin/actions.js
+++ b/packages/strapi-admin/admin/src/containers/Admin/actions.js
@@ -4,13 +4,7 @@
*
*/
-import {
- GET_STRAPI_LATEST_RELEASE_SUCCEEDED,
- GET_USER_PERMISSIONS,
- GET_USER_PERMISSIONS_ERROR,
- GET_USER_PERMISSIONS_SUCCEEDED,
- SET_APP_ERROR,
-} from './constants';
+import { GET_STRAPI_LATEST_RELEASE_SUCCEEDED, SET_APP_ERROR } from './constants';
export function getStrapiLatestReleaseSucceeded(latestStrapiReleaseTag, shouldUpdateStrapi) {
return {
@@ -20,26 +14,6 @@ export function getStrapiLatestReleaseSucceeded(latestStrapiReleaseTag, shouldUp
};
}
-export function getUserPermissions() {
- return {
- type: GET_USER_PERMISSIONS,
- };
-}
-
-export function getUserPermissionsError(error) {
- return {
- type: GET_USER_PERMISSIONS_ERROR,
- error,
- };
-}
-
-export function getUserPermissionsSucceeded(data) {
- return {
- type: GET_USER_PERMISSIONS_SUCCEEDED,
- data,
- };
-}
-
export function setAppError() {
return {
type: SET_APP_ERROR,
diff --git a/packages/strapi-admin/admin/src/containers/Admin/constants.js b/packages/strapi-admin/admin/src/containers/Admin/constants.js
index dca1515264..b23f5e1750 100644
--- a/packages/strapi-admin/admin/src/containers/Admin/constants.js
+++ b/packages/strapi-admin/admin/src/containers/Admin/constants.js
@@ -7,6 +7,3 @@
export const SET_APP_ERROR = 'StrapiAdmin/Admin/SET_APP_ERROR';
export const GET_STRAPI_LATEST_RELEASE_SUCCEEDED =
'StrapiAdmin/Admin/GET_STRAPI_LATEST_RELEASE_SUCCEEDED';
-export const GET_USER_PERMISSIONS = 'StrapiAdmin/Admin/GET_USER_PERMISSIONS';
-export const GET_USER_PERMISSIONS_ERROR = 'StrapiAdmin/Admin/GET_USER_PERMISSIONS_ERROR';
-export const GET_USER_PERMISSIONS_SUCCEEDED = 'StrapiAdmin/Admin/GET_USER_PERMISSIONS_SUCCEEDED';
diff --git a/packages/strapi-admin/admin/src/containers/Admin/index.js b/packages/strapi-admin/admin/src/containers/Admin/index.js
index 6696983a68..0624111160 100644
--- a/packages/strapi-admin/admin/src/containers/Admin/index.js
+++ b/packages/strapi-admin/admin/src/containers/Admin/index.js
@@ -19,7 +19,6 @@ import {
GlobalContextProvider,
LoadingIndicatorPage,
OverlayBlocker,
- UserProvider,
CheckPagePermissions,
request,
} from 'strapi-helper-plugin';
@@ -31,14 +30,14 @@ import Header from '../../components/Header/index';
import NavTopRightWrapper from '../../components/NavTopRightWrapper';
import LeftMenu from '../LeftMenu';
import InstalledPluginsPage from '../InstalledPluginsPage';
-
import HomePage from '../HomePage';
import MarketplacePage from '../MarketplacePage';
import NotFoundPage from '../NotFoundPage';
import OnboardingVideos from '../Onboarding';
-import SettingsPage from '../SettingsPage';
+import PermissionsManager from '../PermissionsManager';
import PluginDispatcher from '../PluginDispatcher';
import ProfilePage from '../ProfilePage';
+import SettingsPage from '../SettingsPage';
import Logout from './Logout';
import {
disableGlobalOverlayBlocker,
@@ -47,13 +46,7 @@ import {
updatePlugin,
} from '../App/actions';
import makeSelecApp from '../App/selectors';
-import {
- getStrapiLatestReleaseSucceeded,
- getUserPermissions,
- getUserPermissionsError,
- getUserPermissionsSucceeded,
- setAppError,
-} from './actions';
+import { getStrapiLatestReleaseSucceeded, setAppError } from './actions';
import makeSelectAdmin from './selectors';
import Wrapper from './Wrapper';
import Content from './Content';
@@ -165,24 +158,6 @@ export class Admin extends React.Component {
}
};
- fetchUserPermissions = async (resetState = false) => {
- const { getUserPermissions, getUserPermissionsError, getUserPermissionsSucceeded } = this.props;
-
- if (resetState) {
- // Show a loader
- getUserPermissions();
- }
-
- try {
- const { data } = await request('/admin/users/me/permissions', { method: 'GET' });
-
- getUserPermissionsSucceeded(data);
- } catch (err) {
- console.error(err);
- getUserPermissionsError(err);
- }
- };
-
hasApluginNotReady = props => {
const {
global: { plugins },
@@ -194,7 +169,6 @@ export class Admin extends React.Component {
initApp = async () => {
await this.fetchAppInfo();
await this.fetchStrapiLatestRelease();
- await this.fetchUserPermissions(true);
};
/**
@@ -233,7 +207,7 @@ export class Admin extends React.Component {
render() {
const {
- admin: { isLoading, shouldUpdateStrapi, userPermissions },
+ admin: { shouldUpdateStrapi },
global: {
autoReload,
blockApp,
@@ -259,29 +233,23 @@ export class Admin extends React.Component {
);
}
- // Show a loader while permissions are being fetched
- if (isLoading) {
- return ;
- }
-
return (
-
-
+
+
{SHOW_TUTORIALS && }
-
-
+
+
);
}
}
@@ -343,17 +311,12 @@ Admin.defaultProps = {
Admin.propTypes = {
admin: PropTypes.shape({
appError: PropTypes.bool,
- isLoading: PropTypes.bool,
shouldUpdateStrapi: PropTypes.bool.isRequired,
- userPermissions: PropTypes.array,
}).isRequired,
disableGlobalOverlayBlocker: PropTypes.func.isRequired,
enableGlobalOverlayBlocker: PropTypes.func.isRequired,
getInfosDataSucceeded: PropTypes.func.isRequired,
getStrapiLatestReleaseSucceeded: PropTypes.func.isRequired,
- getUserPermissions: PropTypes.func.isRequired,
- getUserPermissionsError: PropTypes.func.isRequired,
- getUserPermissionsSucceeded: PropTypes.func.isRequired,
global: PropTypes.shape({
autoReload: PropTypes.bool,
blockApp: PropTypes.bool,
@@ -385,9 +348,6 @@ export function mapDispatchToProps(dispatch) {
enableGlobalOverlayBlocker,
getInfosDataSucceeded,
getStrapiLatestReleaseSucceeded,
- getUserPermissions,
- getUserPermissionsError,
- getUserPermissionsSucceeded,
setAppError,
updatePlugin,
},
diff --git a/packages/strapi-admin/admin/src/containers/Admin/reducer.js b/packages/strapi-admin/admin/src/containers/Admin/reducer.js
index fae68ebaba..d4f8d6959f 100644
--- a/packages/strapi-admin/admin/src/containers/Admin/reducer.js
+++ b/packages/strapi-admin/admin/src/containers/Admin/reducer.js
@@ -7,21 +7,13 @@
import produce from 'immer';
import packageJSON from '../../../../package.json';
-import {
- GET_STRAPI_LATEST_RELEASE_SUCCEEDED,
- GET_USER_PERMISSIONS,
- GET_USER_PERMISSIONS_ERROR,
- GET_USER_PERMISSIONS_SUCCEEDED,
- SET_APP_ERROR,
-} from './constants';
+import { GET_STRAPI_LATEST_RELEASE_SUCCEEDED, SET_APP_ERROR } from './constants';
const packageVersion = packageJSON.version;
const initialState = {
appError: false,
- isLoading: true,
latestStrapiReleaseTag: `v${packageVersion}`,
shouldUpdateStrapi: false,
- userPermissions: [],
};
const reducer = (state = initialState, action) =>
@@ -33,21 +25,7 @@ const reducer = (state = initialState, action) =>
draftState.shouldUpdateStrapi = action.shouldUpdateStrapi;
break;
}
- case GET_USER_PERMISSIONS: {
- draftState.isLoading = true;
- break;
- }
- case GET_USER_PERMISSIONS_ERROR: {
- draftState.error = action.error;
- draftState.isLoading = false;
- break;
- }
- case GET_USER_PERMISSIONS_SUCCEEDED: {
- draftState.isLoading = false;
- draftState.userPermissions = action.data;
- break;
- }
case SET_APP_ERROR: {
draftState.appError = true;
break;
diff --git a/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js b/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js
index a167a4fdee..b3215c2cac 100644
--- a/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js
+++ b/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js
@@ -1,12 +1,6 @@
import produce from 'immer';
import packageJSON from '../../../../../package.json';
-import {
- setAppError,
- getUserPermissions,
- getUserPermissionsError,
- getUserPermissionsSucceeded,
- getStrapiLatestReleaseSucceeded,
-} from '../actions';
+import { setAppError, getStrapiLatestReleaseSucceeded } from '../actions';
import adminReducer from '../reducer';
describe('adminReducer', () => {
@@ -15,9 +9,7 @@ describe('adminReducer', () => {
beforeEach(() => {
state = {
appError: false,
- isLoading: true,
latestStrapiReleaseTag: `v${packageJSON.version}`,
- userPermissions: [],
shouldUpdateStrapi: false,
};
});
@@ -44,32 +36,4 @@ describe('adminReducer', () => {
expect(adminReducer(state, setAppError())).toEqual(expected);
});
-
- it('should handle the getUserPermissions action correctly', () => {
- const expected = produce(state, draft => {
- draft.isLoading = true;
- });
-
- expect(adminReducer(state, getUserPermissions())).toEqual(expected);
- });
-
- it('should handle the getUserPermissionsError action correctly', () => {
- const error = 'Error';
- const expected = produce(state, draft => {
- draft.isLoading = false;
- draft.error = error;
- });
-
- expect(adminReducer(state, getUserPermissionsError(error))).toEqual(expected);
- });
-
- it('should handle the getUserPermissionsSucceeded action correctly', () => {
- const data = ['permission 1', 'permission 2'];
- const expected = produce(state, draft => {
- draft.isLoading = false;
- draft.userPermissions = data;
- });
-
- expect(adminReducer(state, getUserPermissionsSucceeded(data))).toEqual(expected);
- });
});
diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js
index 61afeed016..f69aa8323c 100644
--- a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js
+++ b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js
@@ -32,7 +32,7 @@ import Wrapper from './Wrapper';
const LeftMenu = forwardRef(({ shouldUpdateStrapi, version, plugins }, ref) => {
const location = useLocation();
- const permissions = useContext(UserContext);
+ const { userPermissions: permissions } = useContext(UserContext);
const { menu: settingsMenu } = useSettingsMenu(true);
// TODO: this needs to be added to the settings API in the v4
diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/actions.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/actions.js
new file mode 100644
index 0000000000..d4af9867ec
--- /dev/null
+++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/actions.js
@@ -0,0 +1,25 @@
+import {
+ GET_USER_PERMISSIONS,
+ GET_USER_PERMISSIONS_SUCCEEDED,
+ GET_USER_PERMISSIONS_ERROR,
+} from './constants';
+
+export function getUserPermissions() {
+ return {
+ type: GET_USER_PERMISSIONS,
+ };
+}
+
+export function getUserPermissionsError(error) {
+ return {
+ type: GET_USER_PERMISSIONS_ERROR,
+ error,
+ };
+}
+
+export function getUserPermissionsSucceeded(data) {
+ return {
+ type: GET_USER_PERMISSIONS_SUCCEEDED,
+ data,
+ };
+}
diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/constants.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/constants.js
new file mode 100644
index 0000000000..03d7c86e1c
--- /dev/null
+++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/constants.js
@@ -0,0 +1,5 @@
+export const GET_USER_PERMISSIONS = 'StrapiAdmin/PermissionsManager/GET_USER_PERMISSIONS';
+export const GET_USER_PERMISSIONS_ERROR =
+ 'StrapiAdmin/PermissionsManager/GET_USER_PERMISSIONS_ERROR';
+export const GET_USER_PERMISSIONS_SUCCEEDED =
+ 'StrapiAdmin/PermissionsManager/GET_USER_PERMISSIONS_SUCCEEDED';
diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/index.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/index.js
new file mode 100644
index 0000000000..46f9baa8f8
--- /dev/null
+++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/index.js
@@ -0,0 +1,49 @@
+import React, { useEffect } from 'react';
+import PropTypes from 'prop-types';
+import { useSelector, useDispatch } from 'react-redux';
+import { LoadingIndicatorPage, UserProvider, request } from 'strapi-helper-plugin';
+import {
+ getUserPermissions,
+ getUserPermissionsError,
+ getUserPermissionsSucceeded,
+} from './actions';
+
+const PermissionsManager = ({ children }) => {
+ const { isLoading, userPermissions } = useSelector(state => state.get('permissionsManager'));
+
+ const dispatch = useDispatch();
+ const fetchUserPermissions = async (resetState = false) => {
+ if (resetState) {
+ // Show a loader
+ dispatch(getUserPermissions());
+ }
+
+ try {
+ const { data } = await request('/admin/users/me/permissions', { method: 'GET' });
+
+ dispatch(getUserPermissionsSucceeded(data));
+ } catch (err) {
+ console.error(err);
+ dispatch(getUserPermissionsError(err));
+ }
+ };
+
+ useEffect(() => {
+ fetchUserPermissions(true);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ if (isLoading) {
+ return ;
+ }
+
+ return {children};
+};
+
+PermissionsManager.defaultProps = {};
+
+PermissionsManager.propTypes = {
+ children: PropTypes.node.isRequired,
+};
+
+export default PermissionsManager;
diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/reducer.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/reducer.js
new file mode 100644
index 0000000000..dc1d6407a4
--- /dev/null
+++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/reducer.js
@@ -0,0 +1,66 @@
+/*
+ *
+ * PermissionsManager reducer
+ * The goal of this reducer is to provide
+ * the plugins with an access to the user's permissions
+ * in our middleware system
+ *
+ */
+
+import produce from 'immer';
+
+import {
+ GET_USER_PERMISSIONS,
+ GET_USER_PERMISSIONS_ERROR,
+ GET_USER_PERMISSIONS_SUCCEEDED,
+} from './constants';
+
+const initialState = {
+ isLoading: true,
+ userPermissions: [],
+ collectionTypesRelatedPermissions: {},
+};
+
+const reducer = (state = initialState, action) =>
+ // eslint-disable-next-line consistent-return
+ produce(state, draftState => {
+ switch (action.type) {
+ case GET_USER_PERMISSIONS: {
+ draftState.isLoading = true;
+ draftState.userPermissions = [];
+ draftState.collectionTypesRelatedPermissions = {};
+ break;
+ }
+
+ case GET_USER_PERMISSIONS_ERROR: {
+ draftState.error = action.error;
+ draftState.isLoading = false;
+ break;
+ }
+ case GET_USER_PERMISSIONS_SUCCEEDED: {
+ draftState.isLoading = false;
+ draftState.userPermissions = action.data;
+ draftState.collectionTypesRelatedPermissions = action.data
+ .filter(perm => perm.subject)
+ .reduce((acc, current) => {
+ const { subject, action } = current;
+
+ if (!acc[subject]) {
+ acc[subject] = {};
+ }
+
+ acc[subject] = acc[subject][action]
+ ? { ...acc[subject], [action]: [...acc[subject][action], current] }
+ : { ...acc[subject], [action]: [current] };
+
+ return acc;
+ }, {});
+ break;
+ }
+ default:
+ return state;
+ }
+ });
+
+export default reducer;
+export { initialState };
diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/tests/reducer.test.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/tests/reducer.test.js
new file mode 100644
index 0000000000..214a4148bc
--- /dev/null
+++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/tests/reducer.test.js
@@ -0,0 +1,103 @@
+import produce from 'immer';
+import {
+ getUserPermissions,
+ getUserPermissionsError,
+ getUserPermissionsSucceeded,
+} from '../actions';
+import permissionsManagerReducer from '../reducer';
+
+describe('permissionsManagerReducer', () => {
+ let state;
+
+ beforeEach(() => {
+ state = {
+ isLoading: true,
+ userPermissions: [],
+ collectionTypesRelatedPermissions: {},
+ };
+ });
+
+ it('returns the initial state', () => {
+ const expected = state;
+
+ expect(permissionsManagerReducer(undefined, {})).toEqual(expected);
+ });
+
+ it('should handle the getUserPermissions action correctly', () => {
+ state.userPermissions = ['test'];
+ state.collectionTypesRelatedPermissions = null;
+
+ const expected = produce(state, draft => {
+ draft.isLoading = true;
+ draft.userPermissions = [];
+ draft.collectionTypesRelatedPermissions = {};
+ });
+
+ expect(permissionsManagerReducer(state, getUserPermissions())).toEqual(expected);
+ });
+
+ it('should handle the getUserPermissionsError action correctly', () => {
+ const error = 'Error';
+ const expected = produce(state, draft => {
+ draft.isLoading = false;
+ draft.error = error;
+ });
+
+ expect(permissionsManagerReducer(state, getUserPermissionsError(error))).toEqual(expected);
+ });
+
+ it('should handle the getUserPermissionsSucceeded action correctly', () => {
+ const data = [
+ {
+ action: 'create',
+ subject: 'address',
+ properties: {
+ fields: ['f1'],
+ },
+ conditions: [],
+ },
+ {
+ action: 'create',
+ subject: 'address',
+ properties: {
+ fields: ['f2'],
+ },
+ conditions: [],
+ },
+ {
+ action: 'tes',
+ subject: null,
+ properties: {},
+ conditions: [],
+ },
+ ];
+ const expected = produce(state, draft => {
+ draft.isLoading = false;
+ draft.userPermissions = data;
+ draft.collectionTypesRelatedPermissions = {
+ address: {
+ create: [
+ {
+ action: 'create',
+ subject: 'address',
+ properties: {
+ fields: ['f1'],
+ },
+ conditions: [],
+ },
+ {
+ action: 'create',
+ subject: 'address',
+ properties: {
+ fields: ['f2'],
+ },
+ conditions: [],
+ },
+ ],
+ },
+ };
+ });
+
+ expect(permissionsManagerReducer(state, getUserPermissionsSucceeded(data))).toEqual(expected);
+ });
+});
diff --git a/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js b/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js
index 6e4d4713a8..0971fd35e1 100644
--- a/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js
+++ b/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js
@@ -5,7 +5,7 @@ import reducer, { initialState } from './reducer';
import init from './init';
const useSettingsMenu = (noCheck = false) => {
- const permissions = useContext(UserContext);
+ const { userPermissions: permissions } = useContext(UserContext);
const { plugins } = useGlobalContext();
const [{ isLoading, menu }, dispatch] = useReducer(reducer, initialState, () =>
diff --git a/packages/strapi-admin/admin/src/reducers.js b/packages/strapi-admin/admin/src/reducers.js
index c4582291ea..2c6fed0a5f 100644
--- a/packages/strapi-admin/admin/src/reducers.js
+++ b/packages/strapi-admin/admin/src/reducers.js
@@ -9,7 +9,7 @@ import adminReducer from './containers/Admin/reducer';
import languageProviderReducer from './containers/LanguageProvider/reducer';
import notificationProviderReducer from './containers/NotificationProvider/reducer';
import newNotificationReducer from './containers/NewNotification/reducer';
-
+import permissionsManagerReducer from './containers/PermissionsManager/reducer';
/**
* Creates the main reducer with the dynamically injected ones
*/
@@ -20,6 +20,7 @@ export default function createReducer(injectedReducers) {
language: languageProviderReducer,
notification: notificationProviderReducer,
newNotification: newNotificationReducer,
+ permissionsManager: permissionsManagerReducer,
...injectedReducers,
});
}
diff --git a/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js b/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js
index 92e2b72943..84b6e969c5 100644
--- a/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js
+++ b/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js
@@ -8,7 +8,8 @@ import LoadingIndicatorPage from '../LoadingIndicatorPage';
const CheckPagePermissions = ({ permissions, children }) => {
const abortController = new AbortController();
const { signal } = abortController;
- const userPermissions = useUser();
+ const { userPermissions } = useUser();
+
const [state, setState] = useState({ isLoading: true, canAccess: false });
const isMounted = useRef(true);
diff --git a/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js b/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js
index fd8a026ab8..48145923ca 100644
--- a/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js
+++ b/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js
@@ -8,7 +8,7 @@ import hasPermissions from '../../utils/hasPermissions';
// except that it does not handle redirections nor loading state
const CheckPermissions = ({ permissions, children }) => {
- const userPermissions = useUser();
+ const { userPermissions } = useUser();
const [state, setState] = useState({ isLoading: true, canAccess: false });
const isMounted = useRef(true);
const abortController = new AbortController();
diff --git a/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js b/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js
index 5fab26dc90..03ae08ab5d 100644
--- a/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js
+++ b/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js
@@ -14,7 +14,7 @@ const useUserPermissions = pluginPermissions => {
const permissionNames = useMemo(() => {
return Object.keys(pluginPermissions);
}, [pluginPermissions]);
- const currentUserPermissions = useUser();
+ const { userPermissions: currentUserPermissions } = useUser();
const [state, dispatch] = useReducer(reducer, {}, () => init(permissionNames));
const checkPermissionsRef = useRef();
const generateArrayOfPromisesRef = useRef();
diff --git a/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js b/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js
index af5b8af990..234f120ea1 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js
@@ -11,7 +11,7 @@ const DynamicComponent = ({ componentUid, friendlyName, icon, setIsOverDynamicZo
const [isOver, setIsOver] = useState(false);
const [{ isLoading, canAccess }, setState] = useState({ isLoading: true, canAccess: false });
const { push } = useHistory();
- const userPermissions = useUser();
+ const { userPermissions } = useUser();
useEffect(() => {
const checkPermission = async () => {
diff --git a/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js b/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js
index 9418530f96..a29ac2e0af 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js
@@ -34,7 +34,7 @@ function FilterPicker({
}) {
const { emitEvent } = useGlobalContext();
const emitEventRef = useRef(emitEvent);
- const userPermissions = useUser();
+ const { userPermissions } = useUser();
const readActionAllowedFields = useMemo(() => {
const matchingPermissions = findMatchingPermissions(userPermissions, [
{
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js
index 417658d872..eb517596a4 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js
@@ -39,7 +39,7 @@ const EditView = ({ isSingleType, goBack, layout, slug, state, id, origin }) =>
const { allowedActions, isLoading: isLoadingForPermissions } = useUserPermissions(
viewPermissions
);
- const userPermissions = useUser();
+ const { userPermissions } = useUser();
// Here in case of a 403 response when fetching data we will either redirect to the previous page
// Or to the homepage if there's no state in the history stack
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js
index c88dc0c753..77f4c1647e 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js
@@ -7,6 +7,7 @@ import {
useGlobalContext,
PopUpWarning,
useStrapi,
+ useUser,
} from 'strapi-helper-plugin';
import { useHistory, useLocation, useRouteMatch, Redirect } from 'react-router-dom';
import { connect, useDispatch } from 'react-redux';
@@ -67,7 +68,9 @@ const DataManagerProvider = ({
} = useStrapi();
const { apis } = getPlugin(pluginId);
const [infoModals, toggleInfoModal] = useState({ cancel: false });
- const { autoReload, emitEvent, fetchUserPermissions, formatMessage, menu } = useGlobalContext();
+ const { autoReload, emitEvent, formatMessage } = useGlobalContext();
+ const { fetchUserPermissions } = useUser();
+
const { pathname } = useLocation();
const { push } = useHistory();
const contentTypeMatch = useRouteMatch(`/plugins/${pluginId}/content-types/:uid`);
@@ -301,8 +304,6 @@ const DataManagerProvider = ({
// Refetch the permissions
await updatePermissions();
- // Update the app menu
- await updateAppMenu();
// Refetch all the data
getDataRef.current();
}
@@ -399,7 +400,6 @@ const DataManagerProvider = ({
const dataShape = orderAllDataAttributesWithImmutable(newSchemaToSet, isInContentTypeView);
- // This prevents from losing the created content type or component when clicking on the link from the left menu
const hasJustCreatedSchema =
get(schemaToSet, 'isTemporary', false) &&
size(get(schemaToSet, 'schema.attributes', {})) === 0;
@@ -471,9 +471,6 @@ const DataManagerProvider = ({
await updatePermissions();
- // Update the app menu
- await updateAppMenu();
-
// Submit ct tracking success
if (isInContentTypeView) {
emitEvent('didSaveContentType');
@@ -512,13 +509,6 @@ const DataManagerProvider = ({
toggleInfoModal(prev => ({ ...prev, cancel: !prev.cancel }));
};
- // Update the menu using the internal API
- const updateAppMenu = async () => {
- if (menu.getModels) {
- await menu.getModels();
- }
- };
-
const updatePermissions = async () => {
await fetchUserPermissions();
};