@strapi/plugin-users-permissions 0.0.0-next.e3b4cdeebf6e9b0cd5575ff80b8a86715d44ce98 → 0.0.0-next.e61eff51f9834ffdef16bdc236aecab5f837723b
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/.eslintignore +2 -2
- package/.eslintrc +17 -0
- package/LICENSE +18 -3
- package/admin/src/components/BoundRoute/{index.js → index.jsx} +7 -5
- package/admin/src/components/FormModal/Input/{index.js → index.jsx} +38 -34
- package/admin/src/components/FormModal/index.jsx +115 -0
- package/admin/src/components/Permissions/PermissionRow/{CheckboxWrapper.js → CheckboxWrapper.jsx} +4 -3
- package/admin/src/components/Permissions/PermissionRow/{SubCategory.js → SubCategory.jsx} +27 -15
- package/admin/src/components/Permissions/PermissionRow/{index.js → index.jsx} +4 -2
- package/admin/src/components/Permissions/index.jsx +47 -0
- package/admin/src/components/Permissions/reducer.js +1 -1
- package/admin/src/components/Policies/{index.js → index.jsx} +10 -7
- package/admin/src/components/UsersPermissions/{index.js → index.jsx} +22 -11
- package/admin/src/components/UsersPermissions/reducer.js +1 -1
- package/admin/src/{permissions.js → constants.js} +1 -3
- package/admin/src/contexts/UsersPermissionsContext/{index.js → index.jsx} +1 -0
- package/admin/src/index.js +27 -53
- package/admin/src/pages/AdvancedSettings/index.jsx +214 -0
- package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
- package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
- package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +156 -0
- package/admin/src/pages/EmailTemplates/components/{EmailTable.js → EmailTable.jsx} +28 -23
- package/admin/src/pages/EmailTemplates/index.jsx +148 -0
- package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
- package/admin/src/pages/Providers/index.jsx +262 -0
- package/admin/src/pages/Providers/utils/forms.js +23 -11
- package/admin/src/pages/Roles/constants.js +7 -0
- package/admin/src/pages/Roles/hooks/usePlugins.js +78 -0
- package/admin/src/pages/Roles/index.jsx +24 -0
- package/admin/src/pages/Roles/pages/CreatePage.jsx +194 -0
- package/admin/src/pages/Roles/pages/EditPage.jsx +215 -0
- package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +119 -0
- package/admin/src/pages/Roles/{ListPage/index.js → pages/ListPage/index.jsx} +108 -83
- package/admin/src/pluginId.js +2 -2
- package/admin/src/translations/en.json +1 -1
- package/admin/src/translations/uk.json +41 -4
- package/admin/src/translations/zh-Hans.json +80 -80
- package/admin/src/utils/index.js +1 -2
- package/admin/src/utils/prefixPluginTranslations.js +13 -0
- package/dist/admin/chunks/ar-BJwjobLp.js +45 -0
- package/dist/admin/chunks/ar-BJwjobLp.js.map +1 -0
- package/dist/admin/chunks/ar-G6bUGuUb.mjs +43 -0
- package/dist/admin/chunks/ar-G6bUGuUb.mjs.map +1 -0
- package/dist/admin/chunks/cs-Bu59JqhG.mjs +49 -0
- package/dist/admin/chunks/cs-Bu59JqhG.mjs.map +1 -0
- package/dist/admin/chunks/cs-uS_SIEo8.js +51 -0
- package/dist/admin/chunks/cs-uS_SIEo8.js.map +1 -0
- package/dist/admin/chunks/de-7MVMrqqI.js +63 -0
- package/dist/admin/chunks/de-7MVMrqqI.js.map +1 -0
- package/dist/admin/chunks/de-B81A69_5.mjs +61 -0
- package/dist/admin/chunks/de-B81A69_5.mjs.map +1 -0
- package/dist/admin/chunks/dk-BaelzvBE.mjs +85 -0
- package/dist/admin/chunks/dk-BaelzvBE.mjs.map +1 -0
- package/dist/admin/chunks/dk-DwCLGmy9.js +87 -0
- package/dist/admin/chunks/dk-DwCLGmy9.js.map +1 -0
- package/dist/admin/chunks/en-BhgCBe7M.mjs +85 -0
- package/dist/admin/chunks/en-BhgCBe7M.mjs.map +1 -0
- package/dist/admin/chunks/en-DwQjkHi_.js +87 -0
- package/dist/admin/chunks/en-DwQjkHi_.js.map +1 -0
- package/dist/admin/chunks/es-B0wXmvRj.mjs +85 -0
- package/dist/admin/chunks/es-B0wXmvRj.mjs.map +1 -0
- package/dist/admin/chunks/es-BOJOedG5.js +87 -0
- package/dist/admin/chunks/es-BOJOedG5.js.map +1 -0
- package/dist/admin/chunks/fr-BDNWCNs0.js +51 -0
- package/dist/admin/chunks/fr-BDNWCNs0.js.map +1 -0
- package/dist/admin/chunks/fr-CGYvGUXg.mjs +49 -0
- package/dist/admin/chunks/fr-CGYvGUXg.mjs.map +1 -0
- package/dist/admin/chunks/id-CNzbwFjA.mjs +61 -0
- package/dist/admin/chunks/id-CNzbwFjA.mjs.map +1 -0
- package/dist/admin/chunks/id-UqUPykHZ.js +63 -0
- package/dist/admin/chunks/id-UqUPykHZ.js.map +1 -0
- package/dist/admin/chunks/index--_o6btSC.js +471 -0
- package/dist/admin/chunks/index--_o6btSC.js.map +1 -0
- package/dist/admin/chunks/index-BBjNJt_G.mjs +448 -0
- package/dist/admin/chunks/index-BBjNJt_G.mjs.map +1 -0
- package/dist/admin/chunks/index-BgAfLcWs.mjs +1516 -0
- package/dist/admin/chunks/index-BgAfLcWs.mjs.map +1 -0
- package/dist/admin/chunks/index-CHTUC0LM.mjs +718 -0
- package/dist/admin/chunks/index-CHTUC0LM.mjs.map +1 -0
- package/dist/admin/chunks/index-CY5JZ38k.mjs +213 -0
- package/dist/admin/chunks/index-CY5JZ38k.mjs.map +1 -0
- package/dist/admin/chunks/index-Cu1VuLS3.js +741 -0
- package/dist/admin/chunks/index-Cu1VuLS3.js.map +1 -0
- package/dist/admin/chunks/index-Cy-tPfRk.mjs +279 -0
- package/dist/admin/chunks/index-Cy-tPfRk.mjs.map +1 -0
- package/dist/admin/chunks/index-DD-Z6c1S.js +217 -0
- package/dist/admin/chunks/index-DD-Z6c1S.js.map +1 -0
- package/dist/admin/chunks/index-DFnYIqrB.js +301 -0
- package/dist/admin/chunks/index-DFnYIqrB.js.map +1 -0
- package/dist/admin/chunks/index-DvubCYNe.js +1537 -0
- package/dist/admin/chunks/index-DvubCYNe.js.map +1 -0
- package/dist/admin/chunks/it-B2H2foTf.mjs +61 -0
- package/dist/admin/chunks/it-B2H2foTf.mjs.map +1 -0
- package/dist/admin/chunks/it-D5VuyoLU.js +63 -0
- package/dist/admin/chunks/it-D5VuyoLU.js.map +1 -0
- package/dist/admin/chunks/ja-C0z9d7L9.mjs +47 -0
- package/dist/admin/chunks/ja-C0z9d7L9.mjs.map +1 -0
- package/dist/admin/chunks/ja-MpqVsCgs.js +49 -0
- package/dist/admin/chunks/ja-MpqVsCgs.js.map +1 -0
- package/dist/admin/chunks/ko-Bm-grPSc.js +87 -0
- package/dist/admin/chunks/ko-Bm-grPSc.js.map +1 -0
- package/dist/admin/chunks/ko-CzUgzpeS.mjs +85 -0
- package/dist/admin/chunks/ko-CzUgzpeS.mjs.map +1 -0
- package/dist/admin/chunks/ms-CCacxjim.mjs +48 -0
- package/dist/admin/chunks/ms-CCacxjim.mjs.map +1 -0
- package/dist/admin/chunks/ms-D7eyBD5H.js +50 -0
- package/dist/admin/chunks/ms-D7eyBD5H.js.map +1 -0
- package/dist/admin/chunks/nl-BIOwAQtI.js +49 -0
- package/dist/admin/chunks/nl-BIOwAQtI.js.map +1 -0
- package/dist/admin/chunks/nl-DDC3nZW-.mjs +47 -0
- package/dist/admin/chunks/nl-DDC3nZW-.mjs.map +1 -0
- package/dist/admin/chunks/pl-D5BeNrg_.js +87 -0
- package/dist/admin/chunks/pl-D5BeNrg_.js.map +1 -0
- package/dist/admin/chunks/pl-XkS463rN.mjs +85 -0
- package/dist/admin/chunks/pl-XkS463rN.mjs.map +1 -0
- package/dist/admin/chunks/pt-BR-8cC7z8Km.mjs +43 -0
- package/dist/admin/chunks/pt-BR-8cC7z8Km.mjs.map +1 -0
- package/dist/admin/chunks/pt-BR-DxPBzQGx.js +45 -0
- package/dist/admin/chunks/pt-BR-DxPBzQGx.js.map +1 -0
- package/dist/admin/chunks/pt-DQpEvio8.mjs +47 -0
- package/dist/admin/chunks/pt-DQpEvio8.mjs.map +1 -0
- package/dist/admin/chunks/pt-kkCwzNvH.js +49 -0
- package/dist/admin/chunks/pt-kkCwzNvH.js.map +1 -0
- package/dist/admin/chunks/ru-BQ0gHmp3.js +87 -0
- package/dist/admin/chunks/ru-BQ0gHmp3.js.map +1 -0
- package/dist/admin/chunks/ru-nzL_7Mhg.mjs +85 -0
- package/dist/admin/chunks/ru-nzL_7Mhg.mjs.map +1 -0
- package/dist/admin/chunks/sk-Ddxc_tZA.mjs +49 -0
- package/dist/admin/chunks/sk-Ddxc_tZA.mjs.map +1 -0
- package/dist/admin/chunks/sk-nVwAPdYC.js +51 -0
- package/dist/admin/chunks/sk-nVwAPdYC.js.map +1 -0
- package/dist/admin/chunks/sv-BDfk2A-F.js +87 -0
- package/dist/admin/chunks/sv-BDfk2A-F.js.map +1 -0
- package/dist/admin/chunks/sv-By3RYpMG.mjs +85 -0
- package/dist/admin/chunks/sv-By3RYpMG.mjs.map +1 -0
- package/dist/admin/chunks/th-BtTtpHe2.js +61 -0
- package/dist/admin/chunks/th-BtTtpHe2.js.map +1 -0
- package/dist/admin/chunks/th-COl50vqb.mjs +59 -0
- package/dist/admin/chunks/th-COl50vqb.mjs.map +1 -0
- package/dist/admin/chunks/tr-80SJU6jg.mjs +84 -0
- package/dist/admin/chunks/tr-80SJU6jg.mjs.map +1 -0
- package/dist/admin/chunks/tr-Di-Nf7cT.js +86 -0
- package/dist/admin/chunks/tr-Di-Nf7cT.js.map +1 -0
- package/dist/admin/chunks/uk-DnrIlPwG.mjs +85 -0
- package/dist/admin/chunks/uk-DnrIlPwG.mjs.map +1 -0
- package/dist/admin/chunks/uk-r5zXTAS7.js +87 -0
- package/dist/admin/chunks/uk-r5zXTAS7.js.map +1 -0
- package/dist/admin/chunks/vi-69AF03Iv.mjs +49 -0
- package/dist/admin/chunks/vi-69AF03Iv.mjs.map +1 -0
- package/dist/admin/chunks/vi-D9cCsHsU.js +51 -0
- package/dist/admin/chunks/vi-D9cCsHsU.js.map +1 -0
- package/dist/admin/chunks/zh-BzSkqxo-.mjs +85 -0
- package/dist/admin/chunks/zh-BzSkqxo-.mjs.map +1 -0
- package/dist/admin/chunks/zh-BzWgJEzz.js +87 -0
- package/dist/admin/chunks/zh-BzWgJEzz.js.map +1 -0
- package/dist/admin/chunks/zh-Hans-CKqQbpsM.js +87 -0
- package/dist/admin/chunks/zh-Hans-CKqQbpsM.js.map +1 -0
- package/dist/admin/chunks/zh-Hans-DmDcSsp7.mjs +85 -0
- package/dist/admin/chunks/zh-Hans-DmDcSsp7.mjs.map +1 -0
- package/dist/admin/index.js +8 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +2 -0
- package/dist/admin/index.mjs.map +1 -0
- package/dist/server/index.js +4766 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +4764 -0
- package/dist/server/index.mjs.map +1 -0
- package/documentation/content-api.yaml +1 -1
- package/jest.config.front.js +1 -0
- package/package.json +53 -37
- package/rollup.config.mjs +52 -0
- package/server/bootstrap/index.js +18 -15
- package/server/bootstrap/users-permissions-actions.js +6 -0
- package/server/config.js +29 -0
- package/server/content-types/user/index.js +0 -1
- package/server/controllers/auth.js +75 -39
- package/server/controllers/content-manager-user.js +28 -30
- package/server/controllers/role.js +17 -4
- package/server/controllers/user.js +18 -8
- package/server/controllers/validation/auth.js +104 -25
- package/server/graphql/types/index.js +1 -0
- package/server/graphql/types/me.js +1 -0
- package/server/graphql/types/user-input.js +20 -0
- package/server/middlewares/rateLimit.js +41 -21
- package/server/register.js +2 -2
- package/server/services/jwt.js +3 -3
- package/server/services/permission.js +3 -7
- package/server/services/providers-registry.js +469 -261
- package/server/services/providers.js +10 -5
- package/server/services/role.js +15 -13
- package/server/services/user.js +56 -19
- package/server/services/users-permissions.js +15 -13
- package/server/strategies/users-permissions.js +1 -8
- package/server/utils/index.d.ts +2 -1
- package/server/utils/sanitize/sanitizers.js +7 -3
- package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +2 -2
- package/.eslintrc.js +0 -14
- package/admin/src/components/FormModal/index.js +0 -123
- package/admin/src/components/Permissions/index.js +0 -54
- package/admin/src/hooks/index.js +0 -5
- package/admin/src/hooks/useFetchRole/index.js +0 -64
- package/admin/src/hooks/useFetchRole/reducer.js +0 -31
- package/admin/src/hooks/useForm/index.js +0 -67
- package/admin/src/hooks/useForm/reducer.js +0 -40
- 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/hooks/useRolesList/index.js +0 -62
- package/admin/src/hooks/useRolesList/init.js +0 -5
- package/admin/src/hooks/useRolesList/reducer.js +0 -31
- package/admin/src/pages/AdvancedSettings/index.js +0 -243
- package/admin/src/pages/AdvancedSettings/utils/api.js +0 -17
- package/admin/src/pages/EmailTemplates/components/EmailForm.js +0 -175
- package/admin/src/pages/EmailTemplates/index.js +0 -160
- package/admin/src/pages/EmailTemplates/utils/api.js +0 -17
- package/admin/src/pages/Providers/index.js +0 -272
- package/admin/src/pages/Providers/reducer.js +0 -54
- package/admin/src/pages/Providers/utils/api.js +0 -25
- package/admin/src/pages/Providers/utils/createProvidersArray.js +0 -21
- package/admin/src/pages/Roles/CreatePage/index.js +0 -182
- package/admin/src/pages/Roles/CreatePage/utils/schema.js +0 -9
- package/admin/src/pages/Roles/EditPage/index.js +0 -194
- package/admin/src/pages/Roles/EditPage/utils/schema.js +0 -9
- package/admin/src/pages/Roles/ListPage/components/TableBody.js +0 -92
- package/admin/src/pages/Roles/ListPage/utils/api.js +0 -31
- package/admin/src/pages/Roles/ProtectedCreatePage/index.js +0 -12
- package/admin/src/pages/Roles/ProtectedEditPage/index.js +0 -12
- package/admin/src/pages/Roles/ProtectedListPage/index.js +0 -15
- package/admin/src/pages/Roles/index.js +0 -27
- package/admin/src/utils/getRequestURL.js +0 -5
- package/server/bootstrap/grant-config.js +0 -131
- package/strapi-admin.js +0 -3
- package/strapi-server.js +0 -3
|
@@ -1,85 +1,72 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
|
|
2
3
|
import {
|
|
3
|
-
Button,
|
|
4
|
-
HeaderLayout,
|
|
5
|
-
Layout,
|
|
6
|
-
ContentLayout,
|
|
7
|
-
ActionLayout,
|
|
8
|
-
Main,
|
|
9
4
|
Table,
|
|
10
|
-
Tr,
|
|
11
|
-
Thead,
|
|
12
5
|
Th,
|
|
6
|
+
Thead,
|
|
7
|
+
Tr,
|
|
13
8
|
Typography,
|
|
14
9
|
useNotifyAT,
|
|
15
10
|
VisuallyHidden,
|
|
11
|
+
EmptyStateLayout,
|
|
12
|
+
useCollator,
|
|
13
|
+
useFilter,
|
|
14
|
+
LinkButton,
|
|
15
|
+
Dialog,
|
|
16
16
|
} from '@strapi/design-system';
|
|
17
17
|
import { Plus } from '@strapi/icons';
|
|
18
18
|
import {
|
|
19
|
+
ConfirmDialog,
|
|
19
20
|
useTracking,
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
Page,
|
|
22
|
+
SearchInput,
|
|
22
23
|
useNotification,
|
|
23
|
-
useRBAC,
|
|
24
|
-
NoPermissions,
|
|
25
|
-
LoadingIndicatorPage,
|
|
26
|
-
SearchURLQuery,
|
|
27
|
-
useFocusWhenNavigate,
|
|
28
24
|
useQueryParams,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
} from '@strapi/helper-plugin';
|
|
25
|
+
useFetchClient,
|
|
26
|
+
useRBAC,
|
|
27
|
+
Layouts,
|
|
28
|
+
} from '@strapi/strapi/admin';
|
|
34
29
|
import { useIntl } from 'react-intl';
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
30
|
+
import { useMutation, useQuery } from 'react-query';
|
|
31
|
+
import { NavLink } from 'react-router-dom';
|
|
32
|
+
|
|
33
|
+
import { PERMISSIONS } from '../../../../constants';
|
|
34
|
+
import { getTrad } from '../../../../utils';
|
|
37
35
|
|
|
38
|
-
import { fetchData, deleteData } from './utils/api';
|
|
39
|
-
import { getTrad } from '../../../utils';
|
|
40
|
-
import pluginId from '../../../pluginId';
|
|
41
|
-
import permissions from '../../../permissions';
|
|
42
36
|
import TableBody from './components/TableBody';
|
|
43
37
|
|
|
44
|
-
const
|
|
38
|
+
export const RolesListPage = () => {
|
|
45
39
|
const { trackUsage } = useTracking();
|
|
46
40
|
const { formatMessage, locale } = useIntl();
|
|
47
|
-
const {
|
|
48
|
-
const toggleNotification = useNotification();
|
|
41
|
+
const { toggleNotification } = useNotification();
|
|
49
42
|
const { notifyStatus } = useNotifyAT();
|
|
50
43
|
const [{ query }] = useQueryParams();
|
|
51
44
|
const _q = query?._q || '';
|
|
52
45
|
const [showConfirmDelete, setShowConfirmDelete] = useState(false);
|
|
53
|
-
const [isConfirmButtonLoading, setIsConfirmButtonLoading] = useState(false);
|
|
54
46
|
const [roleToDelete, setRoleToDelete] = useState();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const queryClient = useQueryClient();
|
|
58
|
-
|
|
59
|
-
const updatePermissions = useMemo(() => {
|
|
60
|
-
return {
|
|
61
|
-
create: permissions.createRole,
|
|
62
|
-
read: permissions.readRoles,
|
|
63
|
-
update: permissions.updateRole,
|
|
64
|
-
delete: permissions.deleteRole,
|
|
65
|
-
};
|
|
66
|
-
}, []);
|
|
47
|
+
const { del, get } = useFetchClient();
|
|
67
48
|
|
|
68
49
|
const {
|
|
69
50
|
isLoading: isLoadingForPermissions,
|
|
70
|
-
allowedActions: { canRead, canDelete },
|
|
71
|
-
} = useRBAC(
|
|
51
|
+
allowedActions: { canRead, canDelete, canCreate, canUpdate },
|
|
52
|
+
} = useRBAC({
|
|
53
|
+
create: PERMISSIONS.createRole,
|
|
54
|
+
read: PERMISSIONS.readRoles,
|
|
55
|
+
update: PERMISSIONS.updateRole,
|
|
56
|
+
delete: PERMISSIONS.deleteRole,
|
|
57
|
+
});
|
|
72
58
|
|
|
73
59
|
const {
|
|
74
60
|
isLoading: isLoadingForData,
|
|
75
61
|
data: { roles },
|
|
76
62
|
isFetching,
|
|
77
|
-
|
|
63
|
+
refetch,
|
|
64
|
+
} = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {
|
|
78
65
|
initialData: {},
|
|
79
66
|
enabled: canRead,
|
|
80
67
|
});
|
|
81
68
|
|
|
82
|
-
const {
|
|
69
|
+
const { contains } = useFilter(locale, {
|
|
83
70
|
sensitivity: 'base',
|
|
84
71
|
});
|
|
85
72
|
|
|
@@ -90,17 +77,39 @@ const RoleListPage = () => {
|
|
|
90
77
|
sensitivity: 'base',
|
|
91
78
|
});
|
|
92
79
|
|
|
93
|
-
const isLoading = isLoadingForData || isFetching;
|
|
94
|
-
|
|
95
|
-
const handleNewRoleClick = () => {
|
|
96
|
-
trackUsage('willCreateRole');
|
|
97
|
-
push(`/settings/${pluginId}/roles/new`);
|
|
98
|
-
};
|
|
80
|
+
const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;
|
|
99
81
|
|
|
100
82
|
const handleShowConfirmDelete = () => {
|
|
101
83
|
setShowConfirmDelete(!showConfirmDelete);
|
|
102
84
|
};
|
|
103
85
|
|
|
86
|
+
const deleteData = async (id, formatMessage, toggleNotification) => {
|
|
87
|
+
try {
|
|
88
|
+
await del(`/users-permissions/roles/${id}`);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
toggleNotification({
|
|
91
|
+
type: 'danger',
|
|
92
|
+
message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {
|
|
98
|
+
try {
|
|
99
|
+
const { data } = await get('/users-permissions/roles');
|
|
100
|
+
notifyStatus('The roles have loaded successfully');
|
|
101
|
+
|
|
102
|
+
return data;
|
|
103
|
+
} catch (err) {
|
|
104
|
+
toggleNotification({
|
|
105
|
+
type: 'danger',
|
|
106
|
+
message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
throw new Error(err);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
104
113
|
const emptyLayout = {
|
|
105
114
|
roles: {
|
|
106
115
|
id: getTrad('Roles.empty'),
|
|
@@ -117,21 +126,19 @@ const RoleListPage = () => {
|
|
|
117
126
|
defaultMessage: 'Roles',
|
|
118
127
|
});
|
|
119
128
|
|
|
120
|
-
const deleteMutation = useMutation((id) => deleteData(id, toggleNotification), {
|
|
129
|
+
const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {
|
|
121
130
|
async onSuccess() {
|
|
122
|
-
await
|
|
131
|
+
await refetch();
|
|
123
132
|
},
|
|
124
133
|
});
|
|
125
134
|
|
|
126
135
|
const handleConfirmDelete = async () => {
|
|
127
|
-
setIsConfirmButtonLoading(true);
|
|
128
136
|
await deleteMutation.mutateAsync(roleToDelete);
|
|
129
137
|
setShowConfirmDelete(!showConfirmDelete);
|
|
130
|
-
setIsConfirmButtonLoading(false);
|
|
131
138
|
};
|
|
132
139
|
|
|
133
140
|
const sortedRoles = (roles || [])
|
|
134
|
-
.filter((role) =>
|
|
141
|
+
.filter((role) => contains(role.name, _q) || contains(role.description, _q))
|
|
135
142
|
.sort(
|
|
136
143
|
(a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)
|
|
137
144
|
);
|
|
@@ -141,11 +148,20 @@ const RoleListPage = () => {
|
|
|
141
148
|
const colCount = 4;
|
|
142
149
|
const rowCount = (roles?.length || 0) + 1;
|
|
143
150
|
|
|
151
|
+
if (isLoading) {
|
|
152
|
+
return <Page.Loading />;
|
|
153
|
+
}
|
|
154
|
+
|
|
144
155
|
return (
|
|
145
|
-
<
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
156
|
+
<Layouts.Root>
|
|
157
|
+
<Page.Title>
|
|
158
|
+
{formatMessage(
|
|
159
|
+
{ id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
|
|
160
|
+
{ name: pageTitle }
|
|
161
|
+
)}
|
|
162
|
+
</Page.Title>
|
|
163
|
+
<Page.Main>
|
|
164
|
+
<Layouts.Header
|
|
149
165
|
title={formatMessage({
|
|
150
166
|
id: 'global.roles',
|
|
151
167
|
defaultMessage: 'Roles',
|
|
@@ -155,20 +171,26 @@ const RoleListPage = () => {
|
|
|
155
171
|
defaultMessage: 'List of roles',
|
|
156
172
|
})}
|
|
157
173
|
primaryAction={
|
|
158
|
-
|
|
159
|
-
<
|
|
174
|
+
canCreate ? (
|
|
175
|
+
<LinkButton
|
|
176
|
+
to="new"
|
|
177
|
+
tag={NavLink}
|
|
178
|
+
onClick={() => trackUsage('willCreateRole')}
|
|
179
|
+
startIcon={<Plus />}
|
|
180
|
+
size="S"
|
|
181
|
+
>
|
|
160
182
|
{formatMessage({
|
|
161
183
|
id: getTrad('List.button.roles'),
|
|
162
184
|
defaultMessage: 'Add new role',
|
|
163
185
|
})}
|
|
164
|
-
</
|
|
165
|
-
|
|
186
|
+
</LinkButton>
|
|
187
|
+
) : null
|
|
166
188
|
}
|
|
167
189
|
/>
|
|
168
190
|
|
|
169
|
-
<
|
|
191
|
+
<Layouts.Action
|
|
170
192
|
startActions={
|
|
171
|
-
<
|
|
193
|
+
<SearchInput
|
|
172
194
|
label={formatMessage({
|
|
173
195
|
id: 'app.component.search.label',
|
|
174
196
|
defaultMessage: 'Search',
|
|
@@ -177,9 +199,8 @@ const RoleListPage = () => {
|
|
|
177
199
|
}
|
|
178
200
|
/>
|
|
179
201
|
|
|
180
|
-
<
|
|
181
|
-
{!canRead && <NoPermissions />}
|
|
182
|
-
{(isLoading || isLoadingForPermissions) && <LoadingIndicatorPage />}
|
|
202
|
+
<Layouts.Content>
|
|
203
|
+
{!canRead && <Page.NoPermissions />}
|
|
183
204
|
{canRead && sortedRoles && sortedRoles?.length ? (
|
|
184
205
|
<Table colCount={colCount} rowCount={rowCount}>
|
|
185
206
|
<Thead>
|
|
@@ -218,24 +239,28 @@ const RoleListPage = () => {
|
|
|
218
239
|
<TableBody
|
|
219
240
|
sortedRoles={sortedRoles}
|
|
220
241
|
canDelete={canDelete}
|
|
221
|
-
|
|
242
|
+
canUpdate={canUpdate}
|
|
243
|
+
permissions={PERMISSIONS}
|
|
222
244
|
setRoleToDelete={setRoleToDelete}
|
|
223
245
|
onDelete={[showConfirmDelete, setShowConfirmDelete]}
|
|
224
246
|
/>
|
|
225
247
|
</Table>
|
|
226
248
|
) : (
|
|
227
|
-
<EmptyStateLayout content={emptyLayout[emptyContent]} />
|
|
249
|
+
<EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />
|
|
228
250
|
)}
|
|
229
|
-
</
|
|
230
|
-
<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
/>
|
|
236
|
-
</Main>
|
|
237
|
-
</Layout>
|
|
251
|
+
</Layouts.Content>
|
|
252
|
+
<Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>
|
|
253
|
+
<ConfirmDialog onConfirm={handleConfirmDelete} />
|
|
254
|
+
</Dialog.Root>
|
|
255
|
+
</Page.Main>
|
|
256
|
+
</Layouts.Root>
|
|
238
257
|
);
|
|
239
258
|
};
|
|
240
259
|
|
|
241
|
-
export
|
|
260
|
+
export const ProtectedRolesListPage = () => {
|
|
261
|
+
return (
|
|
262
|
+
<Page.Protect permissions={PERMISSIONS.accessRoles}>
|
|
263
|
+
<RolesListPage />
|
|
264
|
+
</Page.Protect>
|
|
265
|
+
);
|
|
266
|
+
};
|
package/admin/src/pluginId.js
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"Settings.roles.deleted": "Role deleted",
|
|
61
61
|
"Settings.roles.edited": "Role edited",
|
|
62
62
|
"Settings.section-label": "Users & Permissions plugin",
|
|
63
|
-
"components.Input.error.validation.email": "This is
|
|
63
|
+
"components.Input.error.validation.email": "This is not a valid email",
|
|
64
64
|
"components.Input.error.validation.json": "This doesn't match the JSON format",
|
|
65
65
|
"components.Input.error.validation.max": "The value is too high.",
|
|
66
66
|
"components.Input.error.validation.maxLength": "The value is too long.",
|
|
@@ -12,6 +12,16 @@
|
|
|
12
12
|
"EditForm.inputToggle.label.email-confirmation-redirection": "URL для перенаправлення",
|
|
13
13
|
"EditForm.inputToggle.label.email-reset-password": "Сторінка скидання пароля",
|
|
14
14
|
"EditForm.inputToggle.label.sign-up": "Увімкнути реєстрацію",
|
|
15
|
+
"EditForm.inputToggle.placeholder.email-confirmation-redirection": "наприклад: https://yourfrontend.com/email-confirmation-redirection",
|
|
16
|
+
"EditForm.inputToggle.placeholder.email-reset-password": "наприклад: https://yourfrontend.com/reset-password",
|
|
17
|
+
"EditPage.form.roles": "Деталі ролі",
|
|
18
|
+
"Email.template.data.loaded": "Шаблони електронної пошти завантажено",
|
|
19
|
+
"Email.template.email_confirmation": "Підтвердження електронної адреси",
|
|
20
|
+
"Email.template.form.edit.label": "Редагувати шаблон",
|
|
21
|
+
"Email.template.table.action.label": "дія",
|
|
22
|
+
"Email.template.table.icon.label": "іконка",
|
|
23
|
+
"Email.template.table.name.label": "назва",
|
|
24
|
+
"Form.advancedSettings.data.loaded": "Дані розширених налаштувань завантажено",
|
|
15
25
|
"HeaderNav.link.advancedSettings": "Розширені налаштування",
|
|
16
26
|
"HeaderNav.link.emailTemplates": "Шаблони листів",
|
|
17
27
|
"HeaderNav.link.providers": "Провайдери",
|
|
@@ -21,12 +31,14 @@
|
|
|
21
31
|
"Policies.header.hint": "Виберіть дії вашого додатку або дії плаґіну та натисніть на значок шестірні, щоб відобразити пов'язаний маршрут",
|
|
22
32
|
"Policies.header.title": "Розширені налашрування",
|
|
23
33
|
"PopUpForm.Email.email_templates.inputDescription": "Якщо ви не впевнені, як використовувати змінні, {link}",
|
|
34
|
+
"PopUpForm.Email.link.documentation": "перегляньте документацію.",
|
|
24
35
|
"PopUpForm.Email.options.from.email.label": "Email відправника",
|
|
25
36
|
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
|
|
26
37
|
"PopUpForm.Email.options.from.name.label": "Ім'я відправника",
|
|
27
|
-
"PopUpForm.Email.options.from.name.placeholder": "
|
|
38
|
+
"PopUpForm.Email.options.from.name.placeholder": "Тарас Шевченко",
|
|
28
39
|
"PopUpForm.Email.options.message.label": "Повідомлення",
|
|
29
40
|
"PopUpForm.Email.options.object.label": "Тема",
|
|
41
|
+
"PopUpForm.Email.options.object.placeholder": "Будь ласка, підтвердьте свою електронну адресу для %APP_NAME%",
|
|
30
42
|
"PopUpForm.Email.options.response_email.label": "Email для відповіді",
|
|
31
43
|
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
|
|
32
44
|
"PopUpForm.Providers.enabled.description": "Якщо вимкнуто, користувачі не зможуть вікористати цей провайдер.",
|
|
@@ -34,12 +46,37 @@
|
|
|
34
46
|
"PopUpForm.Providers.key.label": "Client ID",
|
|
35
47
|
"PopUpForm.Providers.key.placeholder": "TEXT",
|
|
36
48
|
"PopUpForm.Providers.redirectURL.front-end.label": "URL переадресації для вашего front-end додатку",
|
|
49
|
+
"PopUpForm.Providers.redirectURL.label": "URL -адреса для переадресації, щоб додати у ваші конфігурації програми {постачальник}",
|
|
37
50
|
"PopUpForm.Providers.secret.label": "Client Secret",
|
|
38
51
|
"PopUpForm.Providers.secret.placeholder": "TEXT",
|
|
39
52
|
"PopUpForm.Providers.subdomain.label": "Host URI (Subdomain)",
|
|
40
53
|
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
|
|
41
|
-
"PopUpForm.header.edit.email-templates": "Редагування
|
|
54
|
+
"PopUpForm.header.edit.email-templates": "Редагування шаблону листів",
|
|
55
|
+
"PopUpForm.header.edit.providers": "Редагувати провайдера",
|
|
56
|
+
"Providers.data.loaded": "Провайдери завантажено",
|
|
57
|
+
"Providers.status": "Статус",
|
|
58
|
+
"Roles.empty": "У вас ще немає ролей.",
|
|
59
|
+
"Roles.empty.search": "Не знайдено ролей, що відповідають пошуку.",
|
|
60
|
+
"Settings.roles.deleted": "Роль видалено",
|
|
61
|
+
"Settings.roles.edited": "Роль редаговано",
|
|
62
|
+
"Settings.section-label": "Плаґін користувачів та дозволів",
|
|
63
|
+
"components.Input.error.validation.email": "Це неправильна електронна адреса",
|
|
64
|
+
"components.Input.error.validation.json": "Це не відповідає формату JSON",
|
|
65
|
+
"components.Input.error.validation.max": "Значення занадто велике.",
|
|
66
|
+
"components.Input.error.validation.maxLength": "Значення занадто довге.",
|
|
67
|
+
"components.Input.error.validation.min": "Значення занадто низьке.",
|
|
68
|
+
"components.Input.error.validation.minLength": "Значення занадто коротке.",
|
|
69
|
+
"components.Input.error.validation.minSupMax": "Не може бути більшим",
|
|
70
|
+
"components.Input.error.validation.regex": "Значення не відповідає регулярному виразу.",
|
|
71
|
+
"components.Input.error.validation.required": "Це значення є обов’язковим.",
|
|
72
|
+
"components.Input.error.validation.unique": "Це значення вже використовується.",
|
|
42
73
|
"notification.success.submit": "Налаштування оновлено",
|
|
43
|
-
"
|
|
44
|
-
"plugin.description.
|
|
74
|
+
"page.title": "Налаштування - Ролі",
|
|
75
|
+
"plugin.description.long": "Захистіть API за допомогою процесу аутентифікації на основі JWT. Цей плаґін також включає можливості ACL, які дозволяють керувати дозволами між групами користувачів.",
|
|
76
|
+
"plugin.description.short": "Захистіть API за допомогою процесу аутентифікації на основі JWT",
|
|
77
|
+
"plugin.name": "Плаґін користувачів та дозволів",
|
|
78
|
+
"popUpWarning.button.cancel": "Скасувати",
|
|
79
|
+
"popUpWarning.button.confirm": "Підтвердити",
|
|
80
|
+
"popUpWarning.title": "Будь ласка, підтвердіть",
|
|
81
|
+
"popUpWarning.warning.cancel": "Ви впевнені, що хочете скасувати свої зміни?"
|
|
45
82
|
}
|
|
@@ -1,82 +1,82 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
2
|
+
"BoundRoute.title": "绑定路由到",
|
|
3
|
+
"EditForm.inputSelect.description.role": "新验证身份的用户将被赋予所选角色。",
|
|
4
|
+
"EditForm.inputSelect.label.role": "认证用户的默认角色",
|
|
5
|
+
"EditForm.inputToggle.description.email": "不允许用户使用不同的认证提供商但相同的电子邮件地址来创建多个账户。",
|
|
6
|
+
"EditForm.inputToggle.description.email-confirmation": "启用(开)后,新注册的用户会收到一封确认电子邮件。",
|
|
7
|
+
"EditForm.inputToggle.description.email-confirmation-redirection": "确认您的电子邮件后,选择将您重定向到的位置。",
|
|
8
|
+
"EditForm.inputToggle.description.email-reset-password": "应用程序的重置密码页面的网址",
|
|
9
|
+
"EditForm.inputToggle.description.sign-up": "当禁用(关)时,注册过程将被禁止。任何人无论使用任何的供应商都不可以订阅。",
|
|
10
|
+
"EditForm.inputToggle.label.email": "每个电子邮件地址对应一个账户",
|
|
11
|
+
"EditForm.inputToggle.label.email-confirmation": "启用电子邮件确认",
|
|
12
|
+
"EditForm.inputToggle.label.email-confirmation-redirection": "重定向网址",
|
|
13
|
+
"EditForm.inputToggle.label.email-reset-password": "重置密码页面网址",
|
|
14
|
+
"EditForm.inputToggle.label.sign-up": "启用注册",
|
|
15
|
+
"EditForm.inputToggle.placeholder.email-confirmation-redirection": "例如: https://yourfrontend.com/email-confirmation-redirection",
|
|
16
|
+
"EditForm.inputToggle.placeholder.email-reset-password": "例如: https://yourfrontend.com/reset-password",
|
|
17
|
+
"EditPage.form.roles": "角色详情",
|
|
18
|
+
"Email.template.data.loaded": "电子邮件模板已加载",
|
|
19
|
+
"Email.template.email_confirmation": "邮箱地址确认",
|
|
20
|
+
"Email.template.form.edit.label": "编辑模板",
|
|
21
|
+
"Email.template.table.action.label": "操作",
|
|
22
|
+
"Email.template.table.icon.label": "图标",
|
|
23
|
+
"Email.template.table.name.label": "名称",
|
|
24
|
+
"Form.advancedSettings.data.loaded": "高级设置数据已加载",
|
|
25
|
+
"HeaderNav.link.advancedSettings": "高级设置",
|
|
26
|
+
"HeaderNav.link.emailTemplates": "电子邮件模板",
|
|
27
|
+
"HeaderNav.link.providers": "提供商",
|
|
28
|
+
"Plugin.permissions.plugins.description": "定义 {name} 插件所有允许的操作。",
|
|
29
|
+
"Plugins.header.description": "下面只列出路由绑定的操作。",
|
|
30
|
+
"Plugins.header.title": "权限",
|
|
31
|
+
"Policies.header.hint": "选择应用程序或插件对应的操作,然后点击齿轮图标显示绑定的路由",
|
|
32
|
+
"Policies.header.title": "高级设置",
|
|
33
|
+
"PopUpForm.Email.email_templates.inputDescription": "如果你不确定如何使用变量, {link}",
|
|
34
|
+
"PopUpForm.Email.link.documentation": "查看我们的文档",
|
|
35
|
+
"PopUpForm.Email.options.from.email.label": "发件人地址",
|
|
36
|
+
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
|
|
37
|
+
"PopUpForm.Email.options.from.name.label": "发件人名称",
|
|
38
|
+
"PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
|
|
39
|
+
"PopUpForm.Email.options.message.label": "消息",
|
|
40
|
+
"PopUpForm.Email.options.object.label": "主题",
|
|
41
|
+
"PopUpForm.Email.options.object.placeholder": "请为%APP_NAME%确认邮箱地址",
|
|
42
|
+
"PopUpForm.Email.options.response_email.label": "回复邮件",
|
|
43
|
+
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
|
|
44
|
+
"PopUpForm.Providers.enabled.description": "如果禁用,用户将无法使用此供应商。",
|
|
45
|
+
"PopUpForm.Providers.enabled.label": "启用",
|
|
46
|
+
"PopUpForm.Providers.key.label": "客户端 ID",
|
|
47
|
+
"PopUpForm.Providers.key.placeholder": "文本",
|
|
48
|
+
"PopUpForm.Providers.redirectURL.front-end.label": "重定向网址",
|
|
49
|
+
"PopUpForm.Providers.redirectURL.label": "添加到{provider}应用配置的跳转网址",
|
|
50
|
+
"PopUpForm.Providers.secret.label": "客户端秘钥",
|
|
51
|
+
"PopUpForm.Providers.secret.placeholder": "文本",
|
|
52
|
+
"PopUpForm.Providers.subdomain.label": "主机URI(子域名)",
|
|
53
|
+
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
|
|
54
|
+
"PopUpForm.header.edit.email-templates": "编辑电子邮件模版",
|
|
55
|
+
"PopUpForm.header.edit.providers": "编辑提供商",
|
|
56
|
+
"Providers.data.loaded": "提供商已加载",
|
|
57
|
+
"Providers.status": "状态",
|
|
58
|
+
"Roles.empty": "您还没有任何角色。",
|
|
59
|
+
"Roles.empty.search": "没有与搜索相匹配的角色。",
|
|
60
|
+
"Settings.roles.deleted": "角色已被删除",
|
|
61
|
+
"Settings.roles.edited": "角色编辑完成",
|
|
62
|
+
"Settings.section-label": "用户及权限插件",
|
|
63
|
+
"components.Input.error.validation.email": "这是一个无效的电子邮件",
|
|
64
|
+
"components.Input.error.validation.json": "这不符合JSON格式",
|
|
65
|
+
"components.Input.error.validation.max": "值过高。",
|
|
66
|
+
"components.Input.error.validation.maxLength": "值过长。",
|
|
67
|
+
"components.Input.error.validation.min": "值太低。",
|
|
68
|
+
"components.Input.error.validation.minLength": "值太短。",
|
|
69
|
+
"components.Input.error.validation.minSupMax": "不能超过上限",
|
|
70
|
+
"components.Input.error.validation.regex": "该值不符合正则表达式。",
|
|
71
|
+
"components.Input.error.validation.required": "该值为必填项。",
|
|
72
|
+
"components.Input.error.validation.unique": "该值已被使用。",
|
|
73
|
+
"notification.success.submit": "设置已被更新",
|
|
74
|
+
"page.title": "设置 - 角色",
|
|
75
|
+
"plugin.description.long": "使用基于 JWT 的完整身份验证过程来保护 API。这个插件还有一个 ACL 策略,允许你管理用户组之间的权限。",
|
|
76
|
+
"plugin.description.short": "使用基于 JWT 的完整身份验证过程保护 API",
|
|
77
|
+
"plugin.name": "用户及权限插件",
|
|
78
|
+
"popUpWarning.button.cancel": "取消",
|
|
79
|
+
"popUpWarning.button.confirm": "确认",
|
|
80
|
+
"popUpWarning.title": "请确认",
|
|
81
|
+
"popUpWarning.warning.cancel": "你确定你要取消你的修改?"
|
|
82
82
|
}
|
package/admin/src/utils/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { default as cleanPermissions } from './cleanPermissions';
|
|
2
|
-
export { default as getRequestURL } from './getRequestURL';
|
|
3
|
-
export { default as getTrad } from './getTrad';
|
|
4
2
|
export { default as formatPolicies } from './formatPolicies';
|
|
3
|
+
export { default as getTrad } from './getTrad';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const prefixPluginTranslations = (trad, pluginId) => {
|
|
2
|
+
if (!pluginId) {
|
|
3
|
+
throw new TypeError("pluginId can't be empty");
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return Object.keys(trad).reduce((acc, current) => {
|
|
7
|
+
acc[`${pluginId}.${current}`] = trad[current];
|
|
8
|
+
|
|
9
|
+
return acc;
|
|
10
|
+
}, {});
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { prefixPluginTranslations };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ar = {
|
|
4
|
+
"BoundRoute.title": "Bound route to",
|
|
5
|
+
"EditForm.inputSelect.description.role": "سيتم إرفاق المستخدم المصادق الجديد بالدور المحدد.",
|
|
6
|
+
"EditForm.inputSelect.label.role": "الدور الافتراضي للمستخدمين المصادقين",
|
|
7
|
+
"EditForm.inputToggle.description.email": "عدم السماح للمستخدم بإنشاء حسابات متعددة باستخدام نفس عنوان البريد الإلكتروني مع موفري مصادقة مختلفين.",
|
|
8
|
+
"EditForm.inputToggle.description.sign-up": "عند تعطيل (OFF) ، يتم حظر عملية التسجيل. لا أحد يستطيع الاشتراك بعد الآن بغض النظر عن المزود المستخدم.",
|
|
9
|
+
"EditForm.inputToggle.label.email": "حساب واحد لكل بريد الاكتروني",
|
|
10
|
+
"EditForm.inputToggle.label.sign-up": "تفعيل التسجيل",
|
|
11
|
+
"HeaderNav.link.advancedSettings": "إعدادات متقدمة",
|
|
12
|
+
"HeaderNav.link.emailTemplates": "قوالب الإيميل",
|
|
13
|
+
"HeaderNav.link.providers": "مزودين",
|
|
14
|
+
"Plugin.permissions.plugins.description": "حدد جميع الإجراءات المسموح بها للإضافة {name}.",
|
|
15
|
+
"Plugins.header.description": "يتم سرد الإجراءات المحددة المرتبطة بالمسار أدناه.",
|
|
16
|
+
"Plugins.header.title": "الصلاحيات",
|
|
17
|
+
"Policies.header.hint": "حدد إجراءات التطبيق أو إجراءات الإضافة وانقر على رمز الترس لعرض المسار المرتبط",
|
|
18
|
+
"Policies.header.title": "إعدادات متقدمة",
|
|
19
|
+
"PopUpForm.Email.email_templates.inputDescription": "إذا كنت غير متأكد من كيفية استخدام المتغيرات ، {link}",
|
|
20
|
+
"PopUpForm.Email.options.from.email.label": "البريد الإلكتروني للشاحن",
|
|
21
|
+
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
|
|
22
|
+
"PopUpForm.Email.options.from.name.label": "أسم المورد",
|
|
23
|
+
"PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
|
|
24
|
+
"PopUpForm.Email.options.message.label": "الرسالة",
|
|
25
|
+
"PopUpForm.Email.options.object.label": "موضوع",
|
|
26
|
+
"PopUpForm.Email.options.response_email.label": "البريد الإلكتروني للاستجابة",
|
|
27
|
+
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
|
|
28
|
+
"PopUpForm.Providers.enabled.description": "في حالة التعطيل ، لن يتمكن المستخدمون من استخدام هذا الموفر.",
|
|
29
|
+
"PopUpForm.Providers.enabled.label": "مفعل",
|
|
30
|
+
"PopUpForm.Providers.key.label": "معرف العميل",
|
|
31
|
+
"PopUpForm.Providers.key.placeholder": "نص",
|
|
32
|
+
"PopUpForm.Providers.redirectURL.front-end.label": "عنوان URL لإعادة التوجيه إلى تطبيق الواجهة الأمامية (front-end)",
|
|
33
|
+
"PopUpForm.Providers.secret.label": "سر العميل (Client Secret)",
|
|
34
|
+
"PopUpForm.Providers.secret.placeholder": "نص",
|
|
35
|
+
"PopUpForm.Providers.subdomain.label": "Host URI (Subdomain)",
|
|
36
|
+
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
|
|
37
|
+
"PopUpForm.header.edit.email-templates": "تحرير قوالب البريد الإلكتروني",
|
|
38
|
+
"notification.success.submit": "تم تحديث الإعدادات",
|
|
39
|
+
"plugin.description.long": "حماية الـAPI الخاص بك مع عملية مصادقة كاملة استناداً إلى JWT. يأتي هذا الملحق أيضًا مع إستراتيجية ACL التي تسمح لك بإدارة الأذونات بين مجموعات المستخدمين.",
|
|
40
|
+
"plugin.description.short": "حماية الـAPI الخاص بك مع عملية مصادقة كاملة استناداً إلى JWT",
|
|
41
|
+
"plugin.name": "الأدوار والصلاحية"
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
exports.default = ar;
|
|
45
|
+
//# sourceMappingURL=ar-BJwjobLp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ar-BJwjobLp.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|