mirror of
https://github.com/strapi/strapi.git
synced 2025-09-25 16:29:34 +00:00
wip
This commit is contained in:
parent
cdcac62ee2
commit
a04322d585
@ -9,7 +9,7 @@ import ListView from './index';
|
|||||||
const ListViewLayout = ({ layout, ...props }) => {
|
const ListViewLayout = ({ layout, ...props }) => {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const initialParams = useSelector(state => state.get('content-manager_listView').initialParams);
|
const initialParams = useSelector(state => state.get('content-manager_listView').initialParams);
|
||||||
const [, setQuery] = useQueryParams(initialParams);
|
const [{ query }, setQuery] = useQueryParams(initialParams);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(setLayout(layout.contentType));
|
dispatch(setLayout(layout.contentType));
|
||||||
@ -22,12 +22,14 @@ const ListViewLayout = ({ layout, ...props }) => {
|
|||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [initialParams]);
|
}, [initialParams]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!initialParams) {
|
if (!initialParams) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RBACManager {...props}>
|
<RBACManager {...props} query={query}>
|
||||||
<ListView {...props} layout={layout} />
|
<ListView {...props} layout={layout} />
|
||||||
</RBACManager>
|
</RBACManager>
|
||||||
);
|
);
|
||||||
|
@ -98,6 +98,7 @@ function ListView({
|
|||||||
allowedActions: { canCreate, canRead, canUpdate, canDelete },
|
allowedActions: { canCreate, canRead, canUpdate, canDelete },
|
||||||
} = useUserPermissions(viewPermissions, permissions);
|
} = useUserPermissions(viewPermissions, permissions);
|
||||||
|
|
||||||
|
|
||||||
const [{ query }, setQuery] = useQueryParams(initialParams);
|
const [{ query }, setQuery] = useQueryParams(initialParams);
|
||||||
const params = buildQueryString(query);
|
const params = buildQueryString(query);
|
||||||
|
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
import { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';
|
import { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';
|
||||||
|
|
||||||
export const setPermissions = permissions => {
|
export const setPermissions = (permissions, pluginOptions, containerName) => {
|
||||||
return {
|
return {
|
||||||
type: SET_PERMISSIONS,
|
type: SET_PERMISSIONS,
|
||||||
permissions,
|
permissions,
|
||||||
|
__meta__: {
|
||||||
|
pluginOptions,
|
||||||
|
containerName,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,28 +1,33 @@
|
|||||||
import React, { cloneElement, Children, useEffect } from 'react';
|
import React, { cloneElement, Children, useEffect } from 'react';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import get from 'lodash/get';
|
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { LoadingIndicatorPage } from 'strapi-helper-plugin';
|
import { LoadingIndicatorPage } from 'strapi-helper-plugin';
|
||||||
import pluginId from '../../pluginId';
|
import pluginId from '../../pluginId';
|
||||||
import { resetPermissions, setPermissions } from './actions';
|
import { resetPermissions, setPermissions } from './actions';
|
||||||
|
|
||||||
const RBACManager = props => {
|
const selectPermissions = state => state.get(`${pluginId}_rbacManager`).permissions;
|
||||||
const { collectionTypesRelatedPermissions } = useSelector(state =>
|
|
||||||
state.get('permissionsManager')
|
const selectCollectionTypePermissions = state =>
|
||||||
);
|
state.get('permissionsManager').collectionTypesRelatedPermissions;
|
||||||
const { permissions } = useSelector(state => state.get(`${pluginId}_rbacManager`));
|
|
||||||
|
const RBACManager = ({ query, ...props }) => {
|
||||||
|
const collectionTypesRelatedPermissions = useSelector(selectCollectionTypePermissions);
|
||||||
|
const permissions = useSelector(selectPermissions);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const collectionTypeUID = props.slug;
|
const collectionTypeUID = props.slug;
|
||||||
|
|
||||||
|
const relatedPermissions = collectionTypesRelatedPermissions[collectionTypeUID];
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const relatedPermissions = get(collectionTypesRelatedPermissions, [collectionTypeUID], {});
|
if (query.pluginOptions && relatedPermissions) {
|
||||||
|
dispatch(setPermissions(relatedPermissions, query.pluginOptions, 'listView'));
|
||||||
|
|
||||||
dispatch(setPermissions(relatedPermissions));
|
return () => {
|
||||||
|
dispatch(resetPermissions());
|
||||||
return () => {
|
};
|
||||||
dispatch(resetPermissions());
|
}
|
||||||
};
|
}, [relatedPermissions, dispatch, query]);
|
||||||
}, [collectionTypeUID, collectionTypesRelatedPermissions, dispatch]);
|
|
||||||
|
|
||||||
if (!permissions) {
|
if (!permissions) {
|
||||||
return <LoadingIndicatorPage />;
|
return <LoadingIndicatorPage />;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { Picker, Padded, Text, Flex } from '@buffetjs/core';
|
import { Picker, Padded, Text, Flex } from '@buffetjs/core';
|
||||||
import { Carret, useQueryParams } from 'strapi-helper-plugin';
|
import { Carret, useQueryParams } from 'strapi-helper-plugin';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
@ -40,6 +40,7 @@ const selectContentManagerListViewPluginOptions = state =>
|
|||||||
const selectI18NLocales = state => state.get('i18n_locales').locales;
|
const selectI18NLocales = state => state.get('i18n_locales').locales;
|
||||||
|
|
||||||
const LocalePicker = () => {
|
const LocalePicker = () => {
|
||||||
|
const dispatch = useDispatch();
|
||||||
const pluginOptions = useSelector(selectContentManagerListViewPluginOptions);
|
const pluginOptions = useSelector(selectContentManagerListViewPluginOptions);
|
||||||
const locales = useSelector(selectI18NLocales);
|
const locales = useSelector(selectI18NLocales);
|
||||||
const [selected, setSelected] = useState(locales && locales[0]);
|
const [selected, setSelected] = useState(locales && locales[0]);
|
||||||
@ -68,6 +69,7 @@ const LocalePicker = () => {
|
|||||||
)}
|
)}
|
||||||
renderSectionContent={onToggle => {
|
renderSectionContent={onToggle => {
|
||||||
const handleClick = locale => {
|
const handleClick = locale => {
|
||||||
|
dispatch({ type: 'ContentManager/RBACManager/RESET_PERMISSIONS' });
|
||||||
setSelected(locale);
|
setSelected(locale);
|
||||||
setQuery({ pluginOptions: { ...query.pluginOptions, locale: locale.code } });
|
setQuery({ pluginOptions: { ...query.pluginOptions, locale: locale.code } });
|
||||||
onToggle();
|
onToggle();
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import extendCTBInitialDataMiddleware from './extendCTBInitialDataMiddleware';
|
import extendCTBInitialDataMiddleware from './extendCTBInitialDataMiddleware';
|
||||||
import extendCTBAttributeInitialDataMiddleware from './extendCTBAttributeInitialDataMiddleware';
|
import extendCTBAttributeInitialDataMiddleware from './extendCTBAttributeInitialDataMiddleware';
|
||||||
import localeQueryParamsMiddleware from './localeQueryParamsMiddleware';
|
import localeQueryParamsMiddleware from './localeQueryParamsMiddleware';
|
||||||
|
import localePermissionMiddleware from './localePermissionMiddleware';
|
||||||
|
|
||||||
const middlewares = [
|
const middlewares = [
|
||||||
extendCTBInitialDataMiddleware,
|
extendCTBInitialDataMiddleware,
|
||||||
extendCTBAttributeInitialDataMiddleware,
|
extendCTBAttributeInitialDataMiddleware,
|
||||||
localeQueryParamsMiddleware,
|
localeQueryParamsMiddleware,
|
||||||
|
localePermissionMiddleware,
|
||||||
];
|
];
|
||||||
|
|
||||||
export default middlewares;
|
export default middlewares;
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
import get from 'lodash/get';
|
||||||
|
|
||||||
|
const filterPermissionWithLocale = locale => permission =>
|
||||||
|
permission.properties.locales.indexOf(locale) !== -1;
|
||||||
|
|
||||||
|
const localePermissionMiddleware = () => () => next => action => {
|
||||||
|
if (action.type !== 'ContentManager/RBACManager/SET_PERMISSIONS') {
|
||||||
|
return next(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action.__meta__.containerName !== 'listView') {
|
||||||
|
return next(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!get(action, '__meta__.pluginOptions.locale', false)) {
|
||||||
|
return next(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
const locale = action.__meta__.pluginOptions.locale;
|
||||||
|
const permissions = action.permissions;
|
||||||
|
|
||||||
|
const nextPermissions = Object.keys(permissions).reduce((acc, key) => {
|
||||||
|
const currentPermission = permissions[key];
|
||||||
|
const filteredPermissions = currentPermission.filter(filterPermissionWithLocale(locale));
|
||||||
|
|
||||||
|
if (filteredPermissions.length) {
|
||||||
|
acc[key] = filteredPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return next({ ...action, permissions: nextPermissions });
|
||||||
|
};
|
||||||
|
|
||||||
|
export default localePermissionMiddleware;
|
Loading…
x
Reference in New Issue
Block a user