mirror of
https://github.com/strapi/strapi.git
synced 2025-11-09 14:51:29 +00:00
53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
import { useEffect, useState } from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
import useUser from '../../hooks/useUser';
|
|
import hasPermissions from '../../utils/hasPermissions';
|
|
|
|
// NOTE: this component is very similar to the WithPagePermissions
|
|
// except that it does not handle redirections nor loading state
|
|
|
|
const WithPermissions = ({ permissions, children }) => {
|
|
const userPermissions = useUser();
|
|
const [state, setState] = useState({ isLoading: true, canAccess: false });
|
|
|
|
useEffect(() => {
|
|
const checkPermission = async () => {
|
|
try {
|
|
const canAccess = await hasPermissions(userPermissions, permissions);
|
|
|
|
setState({ isLoading: false, canAccess });
|
|
} catch (err) {
|
|
console.error(err);
|
|
strapi.notification.error('notification.error');
|
|
|
|
setState({ isLoading: false });
|
|
}
|
|
};
|
|
|
|
checkPermission();
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, []);
|
|
|
|
if (state.isLoading) {
|
|
return null;
|
|
}
|
|
|
|
if (!state.canAccess) {
|
|
return null;
|
|
}
|
|
|
|
return children;
|
|
};
|
|
|
|
WithPermissions.defaultProps = {
|
|
permissions: [],
|
|
};
|
|
|
|
WithPermissions.propTypes = {
|
|
children: PropTypes.node.isRequired,
|
|
permissions: PropTypes.array,
|
|
};
|
|
|
|
export default WithPermissions;
|