@strapi/plugin-users-permissions 0.0.0-next.c443fb2cf1a0b330fbf8f4bf6b967c3002ccbd92 → 0.0.0-next.d1dda661d262d4773c59ee693c38542d9b0dc54c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/src/components/BoundRoute/index.js +5 -3
- package/admin/src/components/FormModal/Input/index.js +3 -2
- package/admin/src/components/FormModal/index.js +13 -10
- package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.js +1 -1
- package/admin/src/components/Permissions/PermissionRow/SubCategory.js +26 -5
- package/admin/src/components/Permissions/PermissionRow/index.js +4 -2
- package/admin/src/components/Permissions/index.js +5 -2
- package/admin/src/components/Policies/index.js +3 -2
- package/admin/src/components/UsersPermissions/index.js +8 -5
- package/admin/src/{permissions.js → constants.js} +1 -3
- package/admin/src/contexts/UsersPermissionsContext/index.js +1 -0
- package/admin/src/hooks/index.js +1 -1
- package/admin/src/hooks/useFetchRole/index.js +6 -3
- package/admin/src/hooks/useForm/index.js +4 -1
- package/admin/src/hooks/usePlugins.js +71 -0
- package/admin/src/hooks/useRolesList/index.js +4 -1
- package/admin/src/index.js +7 -5
- package/admin/src/pages/AdvancedSettings/index.js +24 -24
- package/admin/src/pages/AdvancedSettings/utils/api.js +1 -0
- package/admin/src/pages/AdvancedSettings/utils/schema.js +1 -1
- package/admin/src/pages/EmailTemplates/components/EmailForm.js +13 -12
- package/admin/src/pages/EmailTemplates/components/EmailTable.js +9 -7
- package/admin/src/pages/EmailTemplates/index.js +15 -12
- package/admin/src/pages/EmailTemplates/utils/api.js +1 -0
- package/admin/src/pages/EmailTemplates/utils/schema.js +1 -1
- package/admin/src/pages/Providers/index.js +31 -28
- package/admin/src/pages/Providers/utils/api.js +1 -0
- package/admin/src/pages/Providers/utils/forms.js +1 -1
- package/admin/src/pages/Roles/{CreatePage/index.js → CreatePage.js} +25 -22
- package/admin/src/pages/Roles/{EditPage/index.js → EditPage.js} +22 -19
- package/admin/src/pages/Roles/ListPage/components/TableBody.js +4 -3
- package/admin/src/pages/Roles/ListPage/index.js +26 -24
- package/admin/src/pages/Roles/ListPage/utils/api.js +2 -1
- package/admin/src/pages/Roles/{ProtectedCreatePage/index.js → ProtectedCreatePage.js} +6 -3
- package/admin/src/pages/Roles/{ProtectedEditPage/index.js → ProtectedEditPage.js} +6 -3
- package/admin/src/pages/Roles/{ProtectedListPage/index.js → ProtectedListPage.js} +5 -3
- package/admin/src/pages/Roles/{CreatePage/utils/schema.js → constants.js} +2 -4
- package/admin/src/pages/Roles/index.js +9 -6
- package/admin/src/utils/index.js +1 -1
- package/jest.config.front.js +1 -0
- package/package.json +15 -17
- package/server/strategies/users-permissions.js +1 -8
- package/admin/src/hooks/usePlugins/index.js +0 -67
- package/admin/src/hooks/usePlugins/init.js +0 -5
- package/admin/src/hooks/usePlugins/reducer.js +0 -34
- package/admin/src/pages/Roles/EditPage/utils/schema.js +0 -9
|
@@ -1,43 +1,46 @@
|
|
|
1
1
|
import React, { useMemo, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
SettingsPageTitle,
|
|
5
|
-
LoadingIndicatorPage,
|
|
6
|
-
useTracking,
|
|
7
|
-
useNotification,
|
|
8
|
-
useOverlayBlocker,
|
|
9
|
-
CheckPagePermissions,
|
|
10
|
-
useRBAC,
|
|
11
|
-
useFocusWhenNavigate,
|
|
12
|
-
onRowClick,
|
|
13
|
-
stopPropagation,
|
|
14
|
-
} from '@strapi/helper-plugin';
|
|
15
|
-
import has from 'lodash/has';
|
|
16
|
-
import upperFirst from 'lodash/upperFirst';
|
|
2
|
+
|
|
17
3
|
import {
|
|
4
|
+
ContentLayout,
|
|
18
5
|
HeaderLayout,
|
|
6
|
+
IconButton,
|
|
19
7
|
Layout,
|
|
20
|
-
ContentLayout,
|
|
21
8
|
Main,
|
|
22
|
-
useNotifyAT,
|
|
23
9
|
Table,
|
|
24
|
-
Thead,
|
|
25
|
-
Tr,
|
|
26
|
-
Th,
|
|
27
10
|
Tbody,
|
|
28
11
|
Td,
|
|
12
|
+
Th,
|
|
13
|
+
Thead,
|
|
14
|
+
Tr,
|
|
29
15
|
Typography,
|
|
30
|
-
|
|
16
|
+
useNotifyAT,
|
|
31
17
|
VisuallyHidden,
|
|
32
18
|
} from '@strapi/design-system';
|
|
19
|
+
import {
|
|
20
|
+
CheckPagePermissions,
|
|
21
|
+
LoadingIndicatorPage,
|
|
22
|
+
onRowClick,
|
|
23
|
+
SettingsPageTitle,
|
|
24
|
+
stopPropagation,
|
|
25
|
+
useFocusWhenNavigate,
|
|
26
|
+
useNotification,
|
|
27
|
+
useOverlayBlocker,
|
|
28
|
+
useRBAC,
|
|
29
|
+
useTracking,
|
|
30
|
+
} from '@strapi/helper-plugin';
|
|
33
31
|
import { Pencil } from '@strapi/icons';
|
|
34
|
-
import
|
|
35
|
-
import
|
|
32
|
+
import has from 'lodash/has';
|
|
33
|
+
import upperFirst from 'lodash/upperFirst';
|
|
34
|
+
import { useIntl } from 'react-intl';
|
|
35
|
+
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
|
36
|
+
|
|
37
|
+
import FormModal from '../../components/FormModal';
|
|
38
|
+
import { PERMISSIONS } from '../../constants';
|
|
39
|
+
import { getTrad } from '../../utils';
|
|
40
|
+
|
|
36
41
|
import { fetchData, putProvider } from './utils/api';
|
|
37
42
|
import createProvidersArray from './utils/createProvidersArray';
|
|
38
|
-
import
|
|
39
|
-
import pluginPermissions from '../../permissions';
|
|
40
|
-
import FormModal from '../../components/FormModal';
|
|
43
|
+
import forms from './utils/forms';
|
|
41
44
|
|
|
42
45
|
export const ProvidersPage = () => {
|
|
43
46
|
const { formatMessage } = useIntl();
|
|
@@ -53,7 +56,7 @@ export const ProvidersPage = () => {
|
|
|
53
56
|
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
54
57
|
|
|
55
58
|
const updatePermissions = useMemo(() => {
|
|
56
|
-
return { update:
|
|
59
|
+
return { update: PERMISSIONS.updateProviders };
|
|
57
60
|
}, []);
|
|
58
61
|
|
|
59
62
|
const {
|
|
@@ -264,7 +267,7 @@ export const ProvidersPage = () => {
|
|
|
264
267
|
};
|
|
265
268
|
|
|
266
269
|
const ProtectedProvidersPage = () => (
|
|
267
|
-
<CheckPagePermissions permissions={
|
|
270
|
+
<CheckPagePermissions permissions={PERMISSIONS.readProviders}>
|
|
268
271
|
<ProvidersPage />
|
|
269
272
|
</CheckPagePermissions>
|
|
270
273
|
);
|
|
@@ -1,36 +1,39 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
|
|
1
|
+
import React, { useRef, useState } from 'react';
|
|
2
|
+
|
|
3
3
|
import {
|
|
4
|
+
Box,
|
|
5
|
+
Button,
|
|
4
6
|
ContentLayout,
|
|
7
|
+
Flex,
|
|
8
|
+
Grid,
|
|
9
|
+
GridItem,
|
|
5
10
|
HeaderLayout,
|
|
6
11
|
Main,
|
|
7
|
-
Button,
|
|
8
|
-
Flex,
|
|
9
|
-
Box,
|
|
10
|
-
TextInput,
|
|
11
12
|
Textarea,
|
|
13
|
+
TextInput,
|
|
12
14
|
Typography,
|
|
13
|
-
GridItem,
|
|
14
|
-
Grid,
|
|
15
15
|
} from '@strapi/design-system';
|
|
16
|
-
import { Check } from '@strapi/icons';
|
|
17
|
-
import { Formik } from 'formik';
|
|
18
|
-
import { useIntl } from 'react-intl';
|
|
19
16
|
import {
|
|
20
|
-
|
|
17
|
+
Form,
|
|
21
18
|
SettingsPageTitle,
|
|
22
19
|
useFetchClient,
|
|
23
|
-
useTracking,
|
|
24
|
-
Form,
|
|
25
20
|
useNotification,
|
|
21
|
+
useOverlayBlocker,
|
|
22
|
+
useTracking,
|
|
26
23
|
} from '@strapi/helper-plugin';
|
|
27
|
-
import
|
|
28
|
-
import
|
|
29
|
-
import
|
|
30
|
-
import {
|
|
31
|
-
|
|
24
|
+
import { Check } from '@strapi/icons';
|
|
25
|
+
import { Formik } from 'formik';
|
|
26
|
+
import { useIntl } from 'react-intl';
|
|
27
|
+
import { useHistory } from 'react-router-dom';
|
|
28
|
+
|
|
29
|
+
import UsersPermissions from '../../components/UsersPermissions';
|
|
30
|
+
import { usePlugins } from '../../hooks';
|
|
31
|
+
import pluginId from '../../pluginId';
|
|
32
|
+
import getTrad from '../../utils/getTrad';
|
|
33
|
+
|
|
34
|
+
import { createRoleSchema } from './constants';
|
|
32
35
|
|
|
33
|
-
const
|
|
36
|
+
const CreatePage = () => {
|
|
34
37
|
const { formatMessage } = useIntl();
|
|
35
38
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
36
39
|
const toggleNotification = useNotification();
|
|
@@ -82,7 +85,7 @@ const EditPage = () => {
|
|
|
82
85
|
enableReinitialize
|
|
83
86
|
initialValues={{ name: '', description: '' }}
|
|
84
87
|
onSubmit={handleCreateRoleSubmit}
|
|
85
|
-
validationSchema={
|
|
88
|
+
validationSchema={createRoleSchema}
|
|
86
89
|
>
|
|
87
90
|
{({ handleSubmit, values, handleChange, errors }) => (
|
|
88
91
|
<Form noValidate onSubmit={handleSubmit}>
|
|
@@ -179,4 +182,4 @@ const EditPage = () => {
|
|
|
179
182
|
);
|
|
180
183
|
};
|
|
181
184
|
|
|
182
|
-
export default
|
|
185
|
+
export default CreatePage;
|
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
|
|
3
|
-
import { useIntl } from 'react-intl';
|
|
4
|
-
import { useRouteMatch } from 'react-router-dom';
|
|
5
|
-
import {
|
|
6
|
-
useFetchClient,
|
|
7
|
-
useOverlayBlocker,
|
|
8
|
-
SettingsPageTitle,
|
|
9
|
-
LoadingIndicatorPage,
|
|
10
|
-
Form,
|
|
11
|
-
useNotification,
|
|
12
|
-
Link,
|
|
13
|
-
} from '@strapi/helper-plugin';
|
|
1
|
+
import React, { useRef, useState } from 'react';
|
|
2
|
+
|
|
14
3
|
import {
|
|
15
4
|
ContentLayout,
|
|
16
5
|
HeaderLayout,
|
|
@@ -24,12 +13,26 @@ import {
|
|
|
24
13
|
GridItem,
|
|
25
14
|
Grid,
|
|
26
15
|
} from '@strapi/design-system';
|
|
16
|
+
import {
|
|
17
|
+
useFetchClient,
|
|
18
|
+
useOverlayBlocker,
|
|
19
|
+
SettingsPageTitle,
|
|
20
|
+
LoadingIndicatorPage,
|
|
21
|
+
Form,
|
|
22
|
+
useNotification,
|
|
23
|
+
Link,
|
|
24
|
+
} from '@strapi/helper-plugin';
|
|
27
25
|
import { ArrowLeft, Check } from '@strapi/icons';
|
|
28
|
-
import
|
|
29
|
-
import
|
|
30
|
-
import
|
|
31
|
-
|
|
32
|
-
import
|
|
26
|
+
import { Formik } from 'formik';
|
|
27
|
+
import { useIntl } from 'react-intl';
|
|
28
|
+
import { useRouteMatch } from 'react-router-dom';
|
|
29
|
+
|
|
30
|
+
import UsersPermissions from '../../components/UsersPermissions';
|
|
31
|
+
import { usePlugins, useFetchRole } from '../../hooks';
|
|
32
|
+
import pluginId from '../../pluginId';
|
|
33
|
+
import getTrad from '../../utils/getTrad';
|
|
34
|
+
|
|
35
|
+
import { createRoleSchema } from './constants';
|
|
33
36
|
|
|
34
37
|
const EditPage = () => {
|
|
35
38
|
const { formatMessage } = useIntl();
|
|
@@ -87,7 +90,7 @@ const EditPage = () => {
|
|
|
87
90
|
enableReinitialize
|
|
88
91
|
initialValues={{ name: role.name, description: role.description }}
|
|
89
92
|
onSubmit={handleEditRoleSubmit}
|
|
90
|
-
validationSchema={
|
|
93
|
+
validationSchema={createRoleSchema}
|
|
91
94
|
>
|
|
92
95
|
{({ handleSubmit, values, handleChange, errors }) => (
|
|
93
96
|
<Form noValidate onSubmit={handleSubmit}>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { Pencil, Trash } from '@strapi/icons';
|
|
2
|
+
|
|
3
|
+
import { Flex, IconButton, Tbody, Td, Tr, Typography } from '@strapi/design-system';
|
|
5
4
|
import { CheckPermissions, onRowClick, stopPropagation } from '@strapi/helper-plugin';
|
|
5
|
+
import { Pencil, Trash } from '@strapi/icons';
|
|
6
|
+
import PropTypes from 'prop-types';
|
|
6
7
|
import { useIntl } from 'react-intl';
|
|
7
8
|
import { useHistory } from 'react-router-dom';
|
|
8
9
|
|
|
@@ -1,45 +1,47 @@
|
|
|
1
1
|
import React, { useMemo, useState } from 'react';
|
|
2
|
+
|
|
2
3
|
import {
|
|
4
|
+
ActionLayout,
|
|
3
5
|
Button,
|
|
6
|
+
ContentLayout,
|
|
4
7
|
HeaderLayout,
|
|
5
8
|
Layout,
|
|
6
|
-
ContentLayout,
|
|
7
|
-
ActionLayout,
|
|
8
9
|
Main,
|
|
9
10
|
Table,
|
|
10
|
-
Tr,
|
|
11
|
-
Thead,
|
|
12
11
|
Th,
|
|
12
|
+
Thead,
|
|
13
|
+
Tr,
|
|
13
14
|
Typography,
|
|
14
15
|
useNotifyAT,
|
|
15
16
|
VisuallyHidden,
|
|
16
17
|
} from '@strapi/design-system';
|
|
17
|
-
import { Plus } from '@strapi/icons';
|
|
18
18
|
import {
|
|
19
|
-
useTracking,
|
|
20
|
-
SettingsPageTitle,
|
|
21
19
|
CheckPermissions,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
NoPermissions,
|
|
20
|
+
ConfirmDialog,
|
|
21
|
+
EmptyStateLayout,
|
|
25
22
|
LoadingIndicatorPage,
|
|
23
|
+
NoPermissions,
|
|
26
24
|
SearchURLQuery,
|
|
25
|
+
SettingsPageTitle,
|
|
26
|
+
useCollator,
|
|
27
|
+
useFilter,
|
|
27
28
|
useFocusWhenNavigate,
|
|
29
|
+
useNotification,
|
|
28
30
|
useQueryParams,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
useFilter,
|
|
32
|
-
useCollator,
|
|
31
|
+
useRBAC,
|
|
32
|
+
useTracking,
|
|
33
33
|
} from '@strapi/helper-plugin';
|
|
34
|
+
import { Plus } from '@strapi/icons';
|
|
34
35
|
import { useIntl } from 'react-intl';
|
|
35
|
-
import { useHistory } from 'react-router-dom';
|
|
36
36
|
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
|
37
|
+
import { useHistory } from 'react-router-dom';
|
|
37
38
|
|
|
38
|
-
import {
|
|
39
|
-
import { getTrad } from '../../../utils';
|
|
39
|
+
import { PERMISSIONS } from '../../../constants';
|
|
40
40
|
import pluginId from '../../../pluginId';
|
|
41
|
-
import
|
|
41
|
+
import { getTrad } from '../../../utils';
|
|
42
|
+
|
|
42
43
|
import TableBody from './components/TableBody';
|
|
44
|
+
import { deleteData, fetchData } from './utils/api';
|
|
43
45
|
|
|
44
46
|
const RoleListPage = () => {
|
|
45
47
|
const { trackUsage } = useTracking();
|
|
@@ -58,10 +60,10 @@ const RoleListPage = () => {
|
|
|
58
60
|
|
|
59
61
|
const updatePermissions = useMemo(() => {
|
|
60
62
|
return {
|
|
61
|
-
create:
|
|
62
|
-
read:
|
|
63
|
-
update:
|
|
64
|
-
delete:
|
|
63
|
+
create: PERMISSIONS.createRole,
|
|
64
|
+
read: PERMISSIONS.readRoles,
|
|
65
|
+
update: PERMISSIONS.updateRole,
|
|
66
|
+
delete: PERMISSIONS.deleteRole,
|
|
65
67
|
};
|
|
66
68
|
}, []);
|
|
67
69
|
|
|
@@ -155,7 +157,7 @@ const RoleListPage = () => {
|
|
|
155
157
|
defaultMessage: 'List of roles',
|
|
156
158
|
})}
|
|
157
159
|
primaryAction={
|
|
158
|
-
<CheckPermissions permissions={
|
|
160
|
+
<CheckPermissions permissions={PERMISSIONS.createRole}>
|
|
159
161
|
<Button onClick={handleNewRoleClick} startIcon={<Plus />} size="S">
|
|
160
162
|
{formatMessage({
|
|
161
163
|
id: getTrad('List.button.roles'),
|
|
@@ -218,7 +220,7 @@ const RoleListPage = () => {
|
|
|
218
220
|
<TableBody
|
|
219
221
|
sortedRoles={sortedRoles}
|
|
220
222
|
canDelete={canDelete}
|
|
221
|
-
permissions={
|
|
223
|
+
permissions={PERMISSIONS}
|
|
222
224
|
setRoleToDelete={setRoleToDelete}
|
|
223
225
|
onDelete={[showConfirmDelete, setShowConfirmDelete]}
|
|
224
226
|
/>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getFetchClient } from '@strapi/helper-plugin';
|
|
2
|
+
|
|
2
3
|
import { getRequestURL } from '../../../../utils';
|
|
3
4
|
|
|
4
5
|
export const fetchData = async (toggleNotification, notifyStatus) => {
|
|
@@ -14,7 +15,7 @@ export const fetchData = async (toggleNotification, notifyStatus) => {
|
|
|
14
15
|
message: { id: 'notification.error' },
|
|
15
16
|
});
|
|
16
17
|
|
|
17
|
-
throw new Error(
|
|
18
|
+
throw new Error(err);
|
|
18
19
|
}
|
|
19
20
|
};
|
|
20
21
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
|
|
2
3
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
|
3
|
-
|
|
4
|
-
import
|
|
4
|
+
|
|
5
|
+
import { PERMISSIONS } from '../../constants';
|
|
6
|
+
|
|
7
|
+
import RolesCreatePage from './CreatePage';
|
|
5
8
|
|
|
6
9
|
const ProtectedRolesCreatePage = () => (
|
|
7
|
-
<CheckPagePermissions permissions={
|
|
10
|
+
<CheckPagePermissions permissions={PERMISSIONS.createRole}>
|
|
8
11
|
<RolesCreatePage />
|
|
9
12
|
</CheckPagePermissions>
|
|
10
13
|
);
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
|
|
2
3
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
|
3
|
-
|
|
4
|
-
import
|
|
4
|
+
|
|
5
|
+
import { PERMISSIONS } from '../../constants';
|
|
6
|
+
|
|
7
|
+
import RolesEditPage from './EditPage';
|
|
5
8
|
|
|
6
9
|
const ProtectedRolesEditPage = () => (
|
|
7
|
-
<CheckPagePermissions permissions={
|
|
10
|
+
<CheckPagePermissions permissions={PERMISSIONS.updateRole}>
|
|
8
11
|
<RolesEditPage />
|
|
9
12
|
</CheckPagePermissions>
|
|
10
13
|
);
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
|
|
2
3
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
|
3
|
-
import pluginPermissions from '../../../permissions';
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import { PERMISSIONS } from '../../constants';
|
|
6
|
+
|
|
7
|
+
import RolesListPage from './ListPage';
|
|
6
8
|
|
|
7
9
|
const ProtectedRolesListPage = () => {
|
|
8
10
|
return (
|
|
9
|
-
<CheckPagePermissions permissions={
|
|
11
|
+
<CheckPagePermissions permissions={PERMISSIONS.accessRoles}>
|
|
10
12
|
<RolesListPage />
|
|
11
13
|
</CheckPagePermissions>
|
|
12
14
|
);
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import * as yup from 'yup';
|
|
2
1
|
import { translatedErrors } from '@strapi/helper-plugin';
|
|
2
|
+
import * as yup from 'yup';
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
export const createRoleSchema = yup.object().shape({
|
|
5
5
|
name: yup.string().required(translatedErrors.required),
|
|
6
6
|
description: yup.string().required(translatedErrors.required),
|
|
7
7
|
});
|
|
8
|
-
|
|
9
|
-
export default schema;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
2
|
+
|
|
3
|
+
import { AnErrorOccurred, CheckPagePermissions } from '@strapi/helper-plugin';
|
|
4
|
+
import { Route, Switch } from 'react-router-dom';
|
|
5
|
+
|
|
6
|
+
import { PERMISSIONS } from '../../constants';
|
|
4
7
|
import pluginId from '../../pluginId';
|
|
5
|
-
|
|
6
|
-
import ProtectedRolesListPage from './ProtectedListPage';
|
|
7
|
-
import ProtectedRolesEditPage from './ProtectedEditPage';
|
|
8
|
+
|
|
8
9
|
import ProtectedRolesCreatePage from './ProtectedCreatePage';
|
|
10
|
+
import ProtectedRolesEditPage from './ProtectedEditPage';
|
|
11
|
+
import ProtectedRolesListPage from './ProtectedListPage';
|
|
9
12
|
|
|
10
13
|
const Roles = () => {
|
|
11
14
|
return (
|
|
12
|
-
<CheckPagePermissions permissions={
|
|
15
|
+
<CheckPagePermissions permissions={PERMISSIONS.accessRoles}>
|
|
13
16
|
<Switch>
|
|
14
17
|
<Route
|
|
15
18
|
path={`/settings/${pluginId}/roles/new`}
|
package/admin/src/utils/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default as cleanPermissions } from './cleanPermissions';
|
|
2
|
+
export { default as formatPolicies } from './formatPolicies';
|
|
2
3
|
export { default as getRequestURL } from './getRequestURL';
|
|
3
4
|
export { default as getTrad } from './getTrad';
|
|
4
|
-
export { default as formatPolicies } from './formatPolicies';
|
package/jest.config.front.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/plugin-users-permissions",
|
|
3
|
-
"version": "0.0.0-next.
|
|
3
|
+
"version": "0.0.0-next.d1dda661d262d4773c59ee693c38542d9b0dc54c",
|
|
4
4
|
"description": "Protect your API with a full-authentication process based on JWT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"lint": "run -T eslint ."
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@strapi/design-system": "1.
|
|
33
|
-
"@strapi/helper-plugin": "0.0.0-next.
|
|
34
|
-
"@strapi/icons": "1.
|
|
35
|
-
"@strapi/utils": "0.0.0-next.
|
|
32
|
+
"@strapi/design-system": "1.8.0",
|
|
33
|
+
"@strapi/helper-plugin": "0.0.0-next.d1dda661d262d4773c59ee693c38542d9b0dc54c",
|
|
34
|
+
"@strapi/icons": "1.8.0",
|
|
35
|
+
"@strapi/utils": "0.0.0-next.d1dda661d262d4773c59ee693c38542d9b0dc54c",
|
|
36
36
|
"bcryptjs": "2.4.3",
|
|
37
37
|
"formik": "2.4.0",
|
|
38
38
|
"grant-koa": "5.4.8",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"koa": "^2.13.4",
|
|
43
43
|
"koa2-ratelimit": "^1.1.2",
|
|
44
44
|
"lodash": "4.17.21",
|
|
45
|
-
"prop-types": "^15.
|
|
45
|
+
"prop-types": "^15.8.1",
|
|
46
46
|
"purest": "4.0.2",
|
|
47
47
|
"react-intl": "6.4.1",
|
|
48
48
|
"react-query": "3.39.3",
|
|
@@ -51,22 +51,20 @@
|
|
|
51
51
|
"yup": "^0.32.9"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@testing-library/dom": "
|
|
55
|
-
"@testing-library/react": "
|
|
56
|
-
"@testing-library/react-hooks": "8.0.1",
|
|
54
|
+
"@testing-library/dom": "9.2.0",
|
|
55
|
+
"@testing-library/react": "14.0.0",
|
|
57
56
|
"@testing-library/user-event": "14.4.3",
|
|
58
|
-
"history": "^4.9.0",
|
|
59
57
|
"msw": "1.2.1",
|
|
60
|
-
"react": "^
|
|
61
|
-
"react-dom": "^
|
|
58
|
+
"react": "^18.2.0",
|
|
59
|
+
"react-dom": "^18.2.0",
|
|
62
60
|
"react-router-dom": "5.3.4",
|
|
63
61
|
"styled-components": "5.3.3"
|
|
64
62
|
},
|
|
65
63
|
"peerDependencies": {
|
|
66
|
-
"react": "^17.0.
|
|
67
|
-
"react-dom": "^17.0.
|
|
68
|
-
"react-router-dom": "
|
|
69
|
-
"styled-components": "
|
|
64
|
+
"react": "^17.0.0 || ^18.0.0",
|
|
65
|
+
"react-dom": "^17.0.0 || ^18.0.0",
|
|
66
|
+
"react-router-dom": "5.3.4",
|
|
67
|
+
"styled-components": "5.3.3"
|
|
70
68
|
},
|
|
71
69
|
"engines": {
|
|
72
70
|
"node": ">=14.19.1 <=18.x.x",
|
|
@@ -79,5 +77,5 @@
|
|
|
79
77
|
"required": true,
|
|
80
78
|
"kind": "plugin"
|
|
81
79
|
},
|
|
82
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "d1dda661d262d4773c59ee693c38542d9b0dc54c"
|
|
83
81
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { castArray, map, every, pipe
|
|
3
|
+
const { castArray, map, every, pipe } = require('lodash/fp');
|
|
4
4
|
const { ForbiddenError, UnauthorizedError } = require('@strapi/utils').errors;
|
|
5
5
|
|
|
6
6
|
const { getService } = require('../utils');
|
|
@@ -80,13 +80,6 @@ const authenticate = async (ctx) => {
|
|
|
80
80
|
const verify = async (auth, config) => {
|
|
81
81
|
const { credentials: user, ability } = auth;
|
|
82
82
|
|
|
83
|
-
strapi.telemetry.send('didReceiveAPIRequest', {
|
|
84
|
-
eventProperties: {
|
|
85
|
-
authenticationMethod: auth?.strategy?.name,
|
|
86
|
-
isAuthenticated: !isEmpty(user),
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
|
|
90
83
|
if (!config.scope) {
|
|
91
84
|
if (!user) {
|
|
92
85
|
// A non authenticated user cannot access routes that do not have a scope
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useReducer } from 'react';
|
|
2
|
-
import { useNotification, useFetchClient } from '@strapi/helper-plugin';
|
|
3
|
-
import get from 'lodash/get';
|
|
4
|
-
import init from './init';
|
|
5
|
-
import pluginId from '../../pluginId';
|
|
6
|
-
import { cleanPermissions } from '../../utils';
|
|
7
|
-
import reducer, { initialState } from './reducer';
|
|
8
|
-
|
|
9
|
-
const usePlugins = (shouldFetchData = true) => {
|
|
10
|
-
const toggleNotification = useNotification();
|
|
11
|
-
const [{ permissions, routes, isLoading }, dispatch] = useReducer(reducer, initialState, () =>
|
|
12
|
-
init(initialState, shouldFetchData)
|
|
13
|
-
);
|
|
14
|
-
const fetchClient = useFetchClient();
|
|
15
|
-
|
|
16
|
-
const fetchPlugins = useCallback(async () => {
|
|
17
|
-
try {
|
|
18
|
-
dispatch({
|
|
19
|
-
type: 'GET_DATA',
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const [{ permissions }, { routes }] = await Promise.all(
|
|
23
|
-
[`/${pluginId}/permissions`, `/${pluginId}/routes`].map(async (endpoint) => {
|
|
24
|
-
const res = await fetchClient.get(endpoint);
|
|
25
|
-
|
|
26
|
-
return res.data;
|
|
27
|
-
})
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
dispatch({
|
|
31
|
-
type: 'GET_DATA_SUCCEEDED',
|
|
32
|
-
permissions: cleanPermissions(permissions),
|
|
33
|
-
routes,
|
|
34
|
-
});
|
|
35
|
-
} catch (err) {
|
|
36
|
-
const message = get(err, ['response', 'payload', 'message'], 'An error occured');
|
|
37
|
-
|
|
38
|
-
dispatch({
|
|
39
|
-
type: 'GET_DATA_ERROR',
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
if (message !== 'Forbidden') {
|
|
43
|
-
toggleNotification({
|
|
44
|
-
type: 'warning',
|
|
45
|
-
message,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
|
-
}, [toggleNotification]);
|
|
52
|
-
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (shouldFetchData) {
|
|
55
|
-
fetchPlugins();
|
|
56
|
-
}
|
|
57
|
-
}, [fetchPlugins, shouldFetchData]);
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
permissions,
|
|
61
|
-
routes,
|
|
62
|
-
getData: fetchPlugins,
|
|
63
|
-
isLoading,
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export default usePlugins;
|