@strapi/plugin-users-permissions 0.0.0-next.d62456ea471e44d21b938f21f0e91a567cdc6483 → 0.0.0-next.d6c661f8ab4a198d3e4c6a387b9b8f267a100766
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} +3 -3
- package/admin/src/components/FormModal/Input/{index.js → index.jsx} +33 -32
- 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} +13 -22
- 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} +8 -6
- package/admin/src/components/UsersPermissions/{index.js → index.jsx} +15 -7
- package/admin/src/components/UsersPermissions/reducer.js +1 -1
- package/admin/src/index.js +18 -45
- 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} +21 -18
- package/admin/src/pages/EmailTemplates/{index.js → index.jsx} +36 -62
- package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
- package/admin/src/pages/Providers/{index.js → index.jsx} +98 -115
- package/admin/src/pages/Providers/utils/forms.js +23 -11
- package/admin/src/pages/Roles/constants.js +3 -3
- package/admin/src/pages/Roles/hooks/usePlugins.js +4 -4
- package/admin/src/pages/Roles/index.jsx +24 -0
- package/admin/src/pages/Roles/pages/{CreatePage.js → CreatePage.jsx} +55 -69
- package/admin/src/pages/Roles/pages/{EditPage.js → EditPage.jsx} +65 -79
- package/admin/src/pages/Roles/pages/ListPage/components/{TableBody.js → TableBody.jsx} +28 -32
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +264 -0
- 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/utils/formatPluginName.js +1 -1
- package/admin/src/utils/prefixPluginTranslations.js +13 -0
- package/dist/admin/components/BoundRoute/getMethodColor.js +49 -0
- package/dist/admin/components/BoundRoute/getMethodColor.js.map +1 -0
- package/dist/admin/components/BoundRoute/getMethodColor.mjs +47 -0
- package/dist/admin/components/BoundRoute/getMethodColor.mjs.map +1 -0
- package/dist/admin/components/BoundRoute/index.js +98 -0
- package/dist/admin/components/BoundRoute/index.js.map +1 -0
- package/dist/admin/components/BoundRoute/index.mjs +96 -0
- package/dist/admin/components/BoundRoute/index.mjs.map +1 -0
- package/dist/admin/components/FormModal/Input/index.js +123 -0
- package/dist/admin/components/FormModal/Input/index.js.map +1 -0
- package/dist/admin/components/FormModal/Input/index.mjs +121 -0
- package/dist/admin/components/FormModal/Input/index.mjs.map +1 -0
- package/dist/admin/components/FormModal/index.js +110 -0
- package/dist/admin/components/FormModal/index.js.map +1 -0
- package/dist/admin/components/FormModal/index.mjs +108 -0
- package/dist/admin/components/FormModal/index.mjs.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.js +33 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.js.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.mjs +31 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.mjs.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.js +156 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.js.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs +154 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/index.js +50 -0
- package/dist/admin/components/Permissions/PermissionRow/index.js.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/index.mjs +48 -0
- package/dist/admin/components/Permissions/PermissionRow/index.mjs.map +1 -0
- package/dist/admin/components/Permissions/index.js +52 -0
- package/dist/admin/components/Permissions/index.js.map +1 -0
- package/dist/admin/components/Permissions/index.mjs +50 -0
- package/dist/admin/components/Permissions/index.mjs.map +1 -0
- package/dist/admin/components/Permissions/init.js +15 -0
- package/dist/admin/components/Permissions/init.js.map +1 -0
- package/dist/admin/components/Permissions/init.mjs +13 -0
- package/dist/admin/components/Permissions/init.mjs.map +1 -0
- package/dist/admin/components/Permissions/reducer.js +34 -0
- package/dist/admin/components/Permissions/reducer.js.map +1 -0
- package/dist/admin/components/Permissions/reducer.mjs +31 -0
- package/dist/admin/components/Permissions/reducer.mjs.map +1 -0
- package/dist/admin/components/Policies/index.js +67 -0
- package/dist/admin/components/Policies/index.js.map +1 -0
- package/dist/admin/components/Policies/index.mjs +65 -0
- package/dist/admin/components/Policies/index.mjs.map +1 -0
- package/dist/admin/components/UsersPermissions/index.js +115 -0
- package/dist/admin/components/UsersPermissions/index.js.map +1 -0
- package/dist/admin/components/UsersPermissions/index.mjs +113 -0
- package/dist/admin/components/UsersPermissions/index.mjs.map +1 -0
- package/dist/admin/components/UsersPermissions/init.js +13 -0
- package/dist/admin/components/UsersPermissions/init.js.map +1 -0
- package/dist/admin/components/UsersPermissions/init.mjs +11 -0
- package/dist/admin/components/UsersPermissions/init.mjs.map +1 -0
- package/dist/admin/components/UsersPermissions/reducer.js +73 -0
- package/dist/admin/components/UsersPermissions/reducer.js.map +1 -0
- package/dist/admin/components/UsersPermissions/reducer.mjs +68 -0
- package/dist/admin/components/UsersPermissions/reducer.mjs.map +1 -0
- package/dist/admin/constants.js +81 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +79 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.js +23 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.js.map +1 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.mjs +19 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.mjs.map +1 -0
- package/dist/admin/index.js +125 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +121 -0
- package/dist/admin/index.mjs.map +1 -0
- package/dist/admin/package.json.js +14 -0
- package/dist/admin/package.json.js.map +1 -0
- package/dist/admin/package.json.mjs +11 -0
- package/dist/admin/package.json.mjs.map +1 -0
- package/dist/admin/pages/AdvancedSettings/index.js +194 -0
- package/dist/admin/pages/AdvancedSettings/index.js.map +1 -0
- package/dist/admin/pages/AdvancedSettings/index.mjs +191 -0
- package/dist/admin/pages/AdvancedSettings/index.mjs.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.js +83 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.js.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.mjs +81 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.mjs.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.js +40 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.js.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.mjs +19 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js +171 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +169 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.js +145 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.mjs +143 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/index.js +157 -0
- package/dist/admin/pages/EmailTemplates/index.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/index.mjs +135 -0
- package/dist/admin/pages/EmailTemplates/index.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.js +50 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.mjs +29 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.mjs.map +1 -0
- package/dist/admin/pages/Providers/index.js +274 -0
- package/dist/admin/pages/Providers/index.js.map +1 -0
- package/dist/admin/pages/Providers/index.mjs +250 -0
- package/dist/admin/pages/Providers/index.mjs.map +1 -0
- package/dist/admin/pages/Providers/utils/forms.js +281 -0
- package/dist/admin/pages/Providers/utils/forms.js.map +1 -0
- package/dist/admin/pages/Providers/utils/forms.mjs +260 -0
- package/dist/admin/pages/Providers/utils/forms.mjs.map +1 -0
- package/dist/admin/pages/Roles/constants.js +31 -0
- package/dist/admin/pages/Roles/constants.js.map +1 -0
- package/dist/admin/pages/Roles/constants.mjs +10 -0
- package/dist/admin/pages/Roles/constants.mjs.map +1 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.js +78 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.js.map +1 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.mjs +76 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.mjs.map +1 -0
- package/dist/admin/pages/Roles/index.js +35 -0
- package/dist/admin/pages/Roles/index.js.map +1 -0
- package/dist/admin/pages/Roles/index.mjs +33 -0
- package/dist/admin/pages/Roles/index.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/CreatePage.js +225 -0
- package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -0
- package/dist/admin/pages/Roles/pages/CreatePage.mjs +203 -0
- package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/EditPage.js +229 -0
- package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -0
- package/dist/admin/pages/Roles/pages/EditPage.mjs +207 -0
- package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js +125 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs +123 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.js +233 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs +230 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -0
- package/dist/admin/pluginId.js +8 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +6 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/translations/ar.json.js +45 -0
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/translations/ar.json.mjs +43 -0
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/translations/cs.json.js +51 -0
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/translations/cs.json.mjs +49 -0
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/translations/de.json.js +63 -0
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/translations/de.json.mjs +61 -0
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/translations/dk.json.js +87 -0
- package/dist/admin/translations/dk.json.js.map +1 -0
- package/dist/admin/translations/dk.json.mjs +85 -0
- package/dist/admin/translations/dk.json.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +87 -0
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/translations/en.json.mjs +85 -0
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/translations/es.json.js +87 -0
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/translations/es.json.mjs +85 -0
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/translations/fr.json.js +51 -0
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/translations/fr.json.mjs +49 -0
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/translations/id.json.js +63 -0
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/translations/id.json.mjs +61 -0
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/translations/it.json.js +63 -0
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/translations/it.json.mjs +61 -0
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/translations/ja.json.js +49 -0
- package/dist/admin/translations/ja.json.js.map +1 -0
- package/dist/admin/translations/ja.json.mjs +47 -0
- package/dist/admin/translations/ja.json.mjs.map +1 -0
- package/dist/admin/translations/ko.json.js +87 -0
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/translations/ko.json.mjs +85 -0
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/translations/ms.json.js +50 -0
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/translations/ms.json.mjs +48 -0
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/translations/nl.json.js +49 -0
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/translations/nl.json.mjs +47 -0
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/translations/pl.json.js +87 -0
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/translations/pl.json.mjs +85 -0
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/pt-BR.json.js +45 -0
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/translations/pt-BR.json.mjs +43 -0
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/translations/pt.json.js +49 -0
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/translations/pt.json.mjs +47 -0
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/translations/ru.json.js +87 -0
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/translations/ru.json.mjs +85 -0
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/translations/sk.json.js +51 -0
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/translations/sk.json.mjs +49 -0
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/translations/sv.json.js +87 -0
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/translations/sv.json.mjs +85 -0
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/translations/th.json.js +61 -0
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/translations/th.json.mjs +59 -0
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/translations/tr.json.js +86 -0
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/translations/tr.json.mjs +84 -0
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/translations/uk.json.js +87 -0
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/translations/uk.json.mjs +85 -0
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/translations/vi.json.js +51 -0
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/translations/vi.json.mjs +49 -0
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/translations/zh-Hans.json.js +87 -0
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/translations/zh-Hans.json.mjs +85 -0
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/translations/zh.json.js +87 -0
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/translations/zh.json.mjs +85 -0
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/cleanPermissions.js +24 -0
- package/dist/admin/utils/cleanPermissions.js.map +1 -0
- package/dist/admin/utils/cleanPermissions.mjs +22 -0
- package/dist/admin/utils/cleanPermissions.mjs.map +1 -0
- package/dist/admin/utils/formatPluginName.js +29 -0
- package/dist/admin/utils/formatPluginName.js.map +1 -0
- package/dist/admin/utils/formatPluginName.mjs +27 -0
- package/dist/admin/utils/formatPluginName.mjs.map +1 -0
- package/dist/admin/utils/getTrad.js +8 -0
- package/dist/admin/utils/getTrad.js.map +1 -0
- package/dist/admin/utils/getTrad.mjs +6 -0
- package/dist/admin/utils/getTrad.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/server/_virtual/_commonjsHelpers.js +8 -0
- package/dist/server/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/server/_virtual/_commonjsHelpers.mjs +6 -0
- package/dist/server/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/dist/server/bootstrap/index.js +166 -0
- package/dist/server/bootstrap/index.js.map +1 -0
- package/dist/server/bootstrap/index.mjs +164 -0
- package/dist/server/bootstrap/index.mjs.map +1 -0
- package/dist/server/bootstrap/users-permissions-actions.js +98 -0
- package/dist/server/bootstrap/users-permissions-actions.js.map +1 -0
- package/dist/server/bootstrap/users-permissions-actions.mjs +96 -0
- package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -0
- package/dist/server/config.js +70 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/config.mjs +68 -0
- package/dist/server/config.mjs.map +1 -0
- package/dist/server/content-types/index.js +30 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +28 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/permission/index.js +44 -0
- package/dist/server/content-types/permission/index.js.map +1 -0
- package/dist/server/content-types/permission/index.mjs +42 -0
- package/dist/server/content-types/permission/index.mjs.map +1 -0
- package/dist/server/content-types/role/index.js +61 -0
- package/dist/server/content-types/role/index.js.map +1 -0
- package/dist/server/content-types/role/index.mjs +59 -0
- package/dist/server/content-types/role/index.mjs.map +1 -0
- package/dist/server/content-types/user/index.js +84 -0
- package/dist/server/content-types/user/index.js.map +1 -0
- package/dist/server/content-types/user/index.mjs +82 -0
- package/dist/server/content-types/user/index.mjs.map +1 -0
- package/dist/server/content-types/user/schema-config.js +25 -0
- package/dist/server/content-types/user/schema-config.js.map +1 -0
- package/dist/server/content-types/user/schema-config.mjs +23 -0
- package/dist/server/content-types/user/schema-config.mjs.map +1 -0
- package/dist/server/controllers/auth.js +624 -0
- package/dist/server/controllers/auth.js.map +1 -0
- package/dist/server/controllers/auth.mjs +622 -0
- package/dist/server/controllers/auth.mjs.map +1 -0
- package/dist/server/controllers/content-manager-user.js +168 -0
- package/dist/server/controllers/content-manager-user.js.map +1 -0
- package/dist/server/controllers/content-manager-user.mjs +166 -0
- package/dist/server/controllers/content-manager-user.mjs.map +1 -0
- package/dist/server/controllers/index.js +33 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +31 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/permissions.js +37 -0
- package/dist/server/controllers/permissions.js.map +1 -0
- package/dist/server/controllers/permissions.mjs +35 -0
- package/dist/server/controllers/permissions.mjs.map +1 -0
- package/dist/server/controllers/role.js +91 -0
- package/dist/server/controllers/role.js.map +1 -0
- package/dist/server/controllers/role.mjs +89 -0
- package/dist/server/controllers/role.mjs.map +1 -0
- package/dist/server/controllers/settings.js +107 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +105 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/controllers/user.js +201 -0
- package/dist/server/controllers/user.js.map +1 -0
- package/dist/server/controllers/user.mjs +199 -0
- package/dist/server/controllers/user.mjs.map +1 -0
- package/dist/server/controllers/validation/auth.js +131 -0
- package/dist/server/controllers/validation/auth.js.map +1 -0
- package/dist/server/controllers/validation/auth.mjs +129 -0
- package/dist/server/controllers/validation/auth.mjs.map +1 -0
- package/dist/server/controllers/validation/email-template.js +72 -0
- package/dist/server/controllers/validation/email-template.js.map +1 -0
- package/dist/server/controllers/validation/email-template.mjs +70 -0
- package/dist/server/controllers/validation/email-template.mjs.map +1 -0
- package/dist/server/controllers/validation/user.js +54 -0
- package/dist/server/controllers/validation/user.js.map +1 -0
- package/dist/server/controllers/validation/user.mjs +52 -0
- package/dist/server/controllers/validation/user.mjs.map +1 -0
- package/dist/server/graphql/index.js +66 -0
- package/dist/server/graphql/index.js.map +1 -0
- package/dist/server/graphql/index.mjs +64 -0
- package/dist/server/graphql/index.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/change-password.js +40 -0
- package/dist/server/graphql/mutations/auth/change-password.js.map +1 -0
- package/dist/server/graphql/mutations/auth/change-password.mjs +38 -0
- package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.js +38 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.mjs +36 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/forgot-password.js +37 -0
- package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -0
- package/dist/server/graphql/mutations/auth/forgot-password.mjs +35 -0
- package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/login.js +40 -0
- package/dist/server/graphql/mutations/auth/login.js.map +1 -0
- package/dist/server/graphql/mutations/auth/login.mjs +38 -0
- package/dist/server/graphql/mutations/auth/login.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/register.js +38 -0
- package/dist/server/graphql/mutations/auth/register.js.map +1 -0
- package/dist/server/graphql/mutations/auth/register.mjs +36 -0
- package/dist/server/graphql/mutations/auth/register.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/reset-password.js +40 -0
- package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -0
- package/dist/server/graphql/mutations/auth/reset-password.mjs +38 -0
- package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/role/create-role.js +37 -0
- package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -0
- package/dist/server/graphql/mutations/crud/role/create-role.mjs +35 -0
- package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.js +32 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.mjs +30 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/role/update-role.js +39 -0
- package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -0
- package/dist/server/graphql/mutations/crud/role/update-role.mjs +37 -0
- package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/user/create-user.js +46 -0
- package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -0
- package/dist/server/graphql/mutations/crud/user/create-user.mjs +44 -0
- package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.js +44 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.mjs +42 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/user/update-user.js +49 -0
- package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -0
- package/dist/server/graphql/mutations/crud/user/update-user.mjs +47 -0
- package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -0
- package/dist/server/graphql/mutations/index.js +58 -0
- package/dist/server/graphql/mutations/index.js.map +1 -0
- package/dist/server/graphql/mutations/index.mjs +56 -0
- package/dist/server/graphql/mutations/index.mjs.map +1 -0
- package/dist/server/graphql/queries/index.js +25 -0
- package/dist/server/graphql/queries/index.js.map +1 -0
- package/dist/server/graphql/queries/index.mjs +23 -0
- package/dist/server/graphql/queries/index.mjs.map +1 -0
- package/dist/server/graphql/queries/me.js +23 -0
- package/dist/server/graphql/queries/me.js.map +1 -0
- package/dist/server/graphql/queries/me.mjs +21 -0
- package/dist/server/graphql/queries/me.mjs.map +1 -0
- package/dist/server/graphql/resolvers-configs.js +93 -0
- package/dist/server/graphql/resolvers-configs.js.map +1 -0
- package/dist/server/graphql/resolvers-configs.mjs +91 -0
- package/dist/server/graphql/resolvers-configs.mjs.map +1 -0
- package/dist/server/graphql/types/create-role-payload.js +20 -0
- package/dist/server/graphql/types/create-role-payload.js.map +1 -0
- package/dist/server/graphql/types/create-role-payload.mjs +18 -0
- package/dist/server/graphql/types/create-role-payload.mjs.map +1 -0
- package/dist/server/graphql/types/delete-role-payload.js +20 -0
- package/dist/server/graphql/types/delete-role-payload.js.map +1 -0
- package/dist/server/graphql/types/delete-role-payload.mjs +18 -0
- package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -0
- package/dist/server/graphql/types/index.js +41 -0
- package/dist/server/graphql/types/index.js.map +1 -0
- package/dist/server/graphql/types/index.mjs +39 -0
- package/dist/server/graphql/types/index.mjs.map +1 -0
- package/dist/server/graphql/types/login-input.js +24 -0
- package/dist/server/graphql/types/login-input.js.map +1 -0
- package/dist/server/graphql/types/login-input.mjs +22 -0
- package/dist/server/graphql/types/login-input.mjs.map +1 -0
- package/dist/server/graphql/types/login-payload.js +23 -0
- package/dist/server/graphql/types/login-payload.js.map +1 -0
- package/dist/server/graphql/types/login-payload.mjs +21 -0
- package/dist/server/graphql/types/login-payload.mjs.map +1 -0
- package/dist/server/graphql/types/me-role.js +23 -0
- package/dist/server/graphql/types/me-role.js.map +1 -0
- package/dist/server/graphql/types/me-role.mjs +21 -0
- package/dist/server/graphql/types/me-role.mjs.map +1 -0
- package/dist/server/graphql/types/me.js +28 -0
- package/dist/server/graphql/types/me.js.map +1 -0
- package/dist/server/graphql/types/me.mjs +26 -0
- package/dist/server/graphql/types/me.mjs.map +1 -0
- package/dist/server/graphql/types/password-payload.js +20 -0
- package/dist/server/graphql/types/password-payload.js.map +1 -0
- package/dist/server/graphql/types/password-payload.mjs +18 -0
- package/dist/server/graphql/types/password-payload.mjs.map +1 -0
- package/dist/server/graphql/types/register-input.js +22 -0
- package/dist/server/graphql/types/register-input.js.map +1 -0
- package/dist/server/graphql/types/register-input.mjs +20 -0
- package/dist/server/graphql/types/register-input.mjs.map +1 -0
- package/dist/server/graphql/types/update-role-payload.js +20 -0
- package/dist/server/graphql/types/update-role-payload.js.map +1 -0
- package/dist/server/graphql/types/update-role-payload.mjs +18 -0
- package/dist/server/graphql/types/update-role-payload.mjs.map +1 -0
- package/dist/server/graphql/types/user-input.js +26 -0
- package/dist/server/graphql/types/user-input.js.map +1 -0
- package/dist/server/graphql/types/user-input.mjs +24 -0
- package/dist/server/graphql/types/user-input.mjs.map +1 -0
- package/dist/server/graphql/utils.js +32 -0
- package/dist/server/graphql/utils.js.map +1 -0
- package/dist/server/graphql/utils.mjs +30 -0
- package/dist/server/graphql/utils.mjs.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +8 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/index2.js +39 -0
- package/dist/server/index2.js.map +1 -0
- package/dist/server/index2.mjs +37 -0
- package/dist/server/index2.mjs.map +1 -0
- package/dist/server/middlewares/index.js +18 -0
- package/dist/server/middlewares/index.js.map +1 -0
- package/dist/server/middlewares/index.mjs +16 -0
- package/dist/server/middlewares/index.mjs.map +1 -0
- package/dist/server/middlewares/rateLimit.js +51 -0
- package/dist/server/middlewares/rateLimit.js.map +1 -0
- package/dist/server/middlewares/rateLimit.mjs +49 -0
- package/dist/server/middlewares/rateLimit.mjs.map +1 -0
- package/dist/server/register.js +41 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +39 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/admin/index.js +27 -0
- package/dist/server/routes/admin/index.js.map +1 -0
- package/dist/server/routes/admin/index.mjs +25 -0
- package/dist/server/routes/admin/index.mjs.map +1 -0
- package/dist/server/routes/admin/permissions.js +29 -0
- package/dist/server/routes/admin/permissions.js.map +1 -0
- package/dist/server/routes/admin/permissions.mjs +27 -0
- package/dist/server/routes/admin/permissions.mjs.map +1 -0
- package/dist/server/routes/admin/role.js +99 -0
- package/dist/server/routes/admin/role.js.map +1 -0
- package/dist/server/routes/admin/role.mjs +97 -0
- package/dist/server/routes/admin/role.mjs.map +1 -0
- package/dist/server/routes/admin/settings.js +116 -0
- package/dist/server/routes/admin/settings.js.map +1 -0
- package/dist/server/routes/admin/settings.mjs +114 -0
- package/dist/server/routes/admin/settings.mjs.map +1 -0
- package/dist/server/routes/content-api/auth.js +168 -0
- package/dist/server/routes/content-api/auth.js.map +1 -0
- package/dist/server/routes/content-api/auth.mjs +166 -0
- package/dist/server/routes/content-api/auth.mjs.map +1 -0
- package/dist/server/routes/content-api/index.js +32 -0
- package/dist/server/routes/content-api/index.js.map +1 -0
- package/dist/server/routes/content-api/index.mjs +30 -0
- package/dist/server/routes/content-api/index.mjs.map +1 -0
- package/dist/server/routes/content-api/permissions.js +26 -0
- package/dist/server/routes/content-api/permissions.js.map +1 -0
- package/dist/server/routes/content-api/permissions.mjs +24 -0
- package/dist/server/routes/content-api/permissions.mjs.map +1 -0
- package/dist/server/routes/content-api/role.js +73 -0
- package/dist/server/routes/content-api/role.js.map +1 -0
- package/dist/server/routes/content-api/role.mjs +71 -0
- package/dist/server/routes/content-api/role.mjs.map +1 -0
- package/dist/server/routes/content-api/user.js +132 -0
- package/dist/server/routes/content-api/user.js.map +1 -0
- package/dist/server/routes/content-api/user.mjs +130 -0
- package/dist/server/routes/content-api/user.mjs.map +1 -0
- package/dist/server/routes/content-api/validation.js +217 -0
- package/dist/server/routes/content-api/validation.js.map +1 -0
- package/dist/server/routes/content-api/validation.mjs +215 -0
- package/dist/server/routes/content-api/validation.mjs.map +1 -0
- package/dist/server/routes/index.js +19 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +17 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/services/constants.js +19 -0
- package/dist/server/services/constants.js.map +1 -0
- package/dist/server/services/constants.mjs +17 -0
- package/dist/server/services/constants.mjs.map +1 -0
- package/dist/server/services/index.js +36 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +34 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/jwt.js +93 -0
- package/dist/server/services/jwt.js.map +1 -0
- package/dist/server/services/jwt.mjs +91 -0
- package/dist/server/services/jwt.mjs.map +1 -0
- package/dist/server/services/permission.js +52 -0
- package/dist/server/services/permission.js.map +1 -0
- package/dist/server/services/permission.mjs +50 -0
- package/dist/server/services/permission.mjs.map +1 -0
- package/dist/server/services/providers-registry.js +555 -0
- package/dist/server/services/providers-registry.js.map +1 -0
- package/dist/server/services/providers-registry.mjs +553 -0
- package/dist/server/services/providers-registry.mjs.map +1 -0
- package/dist/server/services/providers.js +111 -0
- package/dist/server/services/providers.js.map +1 -0
- package/dist/server/services/providers.mjs +109 -0
- package/dist/server/services/providers.mjs.map +1 -0
- package/dist/server/services/role.js +186 -0
- package/dist/server/services/role.js.map +1 -0
- package/dist/server/services/role.mjs +184 -0
- package/dist/server/services/role.mjs.map +1 -0
- package/dist/server/services/user.js +188 -0
- package/dist/server/services/user.js.map +1 -0
- package/dist/server/services/user.mjs +186 -0
- package/dist/server/services/user.mjs.map +1 -0
- package/dist/server/services/users-permissions.js +248 -0
- package/dist/server/services/users-permissions.js.map +1 -0
- package/dist/server/services/users-permissions.mjs +246 -0
- package/dist/server/services/users-permissions.mjs.map +1 -0
- package/dist/server/strategies/users-permissions.js +114 -0
- package/dist/server/strategies/users-permissions.js.map +1 -0
- package/dist/server/strategies/users-permissions.mjs +112 -0
- package/dist/server/strategies/users-permissions.mjs.map +1 -0
- package/dist/server/utils/index.js +22 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +20 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/dist/server/utils/sanitize/index.js +21 -0
- package/dist/server/utils/sanitize/index.js.map +1 -0
- package/dist/server/utils/sanitize/index.mjs +19 -0
- package/dist/server/utils/sanitize/index.mjs.map +1 -0
- package/dist/server/utils/sanitize/sanitizers.js +32 -0
- package/dist/server/utils/sanitize/sanitizers.js.map +1 -0
- package/dist/server/utils/sanitize/sanitizers.mjs +30 -0
- package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -0
- package/dist/server/utils/sanitize/visitors/index.js +17 -0
- package/dist/server/utils/sanitize/visitors/index.js.map +1 -0
- package/dist/server/utils/sanitize/visitors/index.mjs +15 -0
- package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +17 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs +15 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -0
- package/package.json +49 -29
- package/rollup.config.mjs +19 -0
- package/server/bootstrap/index.js +49 -51
- package/server/bootstrap/users-permissions-actions.js +6 -0
- package/server/config.js +51 -0
- package/server/content-types/user/index.js +0 -1
- package/server/controllers/auth.js +295 -72
- package/server/controllers/content-manager-user.js +31 -34
- package/server/controllers/role.js +17 -4
- package/server/controllers/user.js +8 -9
- package/server/controllers/validation/auth.js +104 -25
- package/server/controllers/validation/user.js +12 -1
- 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 +1 -1
- package/server/register.js +2 -2
- package/server/routes/content-api/auth.js +119 -71
- package/server/routes/content-api/index.js +11 -4
- package/server/routes/content-api/permissions.js +14 -7
- package/server/routes/content-api/role.js +57 -27
- package/server/routes/content-api/user.js +108 -51
- package/server/routes/content-api/validation.js +250 -0
- package/server/services/constants.js +9 -0
- package/server/services/jwt.js +53 -5
- 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 +67 -19
- package/server/services/users-permissions.js +19 -15
- 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 -126
- package/admin/src/components/Permissions/index.js +0 -55
- package/admin/src/pages/AdvancedSettings/index.js +0 -259
- package/admin/src/pages/EmailTemplates/components/EmailForm.js +0 -176
- package/admin/src/pages/Roles/index.js +0 -33
- package/admin/src/pages/Roles/pages/ListPage/index.js +0 -242
- package/admin/src/pages/Roles/pages/ListPage/utils/api.js +0 -30
- package/server/bootstrap/grant-config.js +0 -131
- package/strapi-admin.js +0 -3
- package/strapi-server.js +0 -3
- /package/admin/src/components/Permissions/PermissionRow/{index.js → index.jsx} +0 -0
- /package/admin/src/contexts/UsersPermissionsContext/{index.js → index.jsx} +0 -0
|
@@ -11,9 +11,6 @@ const crypto = require('crypto');
|
|
|
11
11
|
const _ = require('lodash');
|
|
12
12
|
const { concat, compact, isArray } = require('lodash/fp');
|
|
13
13
|
const utils = require('@strapi/utils');
|
|
14
|
-
const {
|
|
15
|
-
contentTypes: { getNonWritableAttributes },
|
|
16
|
-
} = require('@strapi/utils');
|
|
17
14
|
const { getService } = require('../utils');
|
|
18
15
|
const {
|
|
19
16
|
validateCallbackBody,
|
|
@@ -25,17 +22,22 @@ const {
|
|
|
25
22
|
validateChangePasswordBody,
|
|
26
23
|
} = require('./validation/auth');
|
|
27
24
|
|
|
28
|
-
const { getAbsoluteAdminUrl, getAbsoluteServerUrl, sanitize } = utils;
|
|
29
25
|
const { ApplicationError, ValidationError, ForbiddenError } = utils.errors;
|
|
30
26
|
|
|
31
27
|
const sanitizeUser = (user, ctx) => {
|
|
32
28
|
const { auth } = ctx.state;
|
|
33
29
|
const userSchema = strapi.getModel('plugin::users-permissions.user');
|
|
34
30
|
|
|
35
|
-
return
|
|
31
|
+
return strapi.contentAPI.sanitize.output(user, userSchema, { auth });
|
|
36
32
|
};
|
|
37
33
|
|
|
38
|
-
|
|
34
|
+
const extractDeviceId = (requestBody) => {
|
|
35
|
+
const { deviceId } = requestBody || {};
|
|
36
|
+
|
|
37
|
+
return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
module.exports = ({ strapi }) => ({
|
|
39
41
|
async callback(ctx) {
|
|
40
42
|
const provider = ctx.params.provider || 'local';
|
|
41
43
|
const params = ctx.request.body;
|
|
@@ -55,7 +57,7 @@ module.exports = {
|
|
|
55
57
|
const { identifier } = params;
|
|
56
58
|
|
|
57
59
|
// Check if the user exists.
|
|
58
|
-
const user = await strapi.query('plugin::users-permissions.user').findOne({
|
|
60
|
+
const user = await strapi.db.query('plugin::users-permissions.user').findOne({
|
|
59
61
|
where: {
|
|
60
62
|
provider,
|
|
61
63
|
$or: [{ email: identifier.toLowerCase() }, { username: identifier }],
|
|
@@ -90,6 +92,45 @@ module.exports = {
|
|
|
90
92
|
throw new ApplicationError('Your account has been blocked by an administrator');
|
|
91
93
|
}
|
|
92
94
|
|
|
95
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
96
|
+
if (mode === 'refresh') {
|
|
97
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
98
|
+
|
|
99
|
+
const refresh = await strapi
|
|
100
|
+
.sessionManager('users-permissions')
|
|
101
|
+
.generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });
|
|
102
|
+
|
|
103
|
+
const access = await strapi
|
|
104
|
+
.sessionManager('users-permissions')
|
|
105
|
+
.generateAccessToken(refresh.token);
|
|
106
|
+
if ('error' in access) {
|
|
107
|
+
throw new ApplicationError('Invalid credentials');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const upSessions = strapi.config.get('plugin::users-permissions.sessions');
|
|
111
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
112
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
113
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
114
|
+
const cookieOptions = {
|
|
115
|
+
httpOnly: true,
|
|
116
|
+
secure: Boolean(upSessions.cookie?.secure),
|
|
117
|
+
sameSite: upSessions.cookie?.sameSite ?? 'lax',
|
|
118
|
+
path: upSessions.cookie?.path ?? '/',
|
|
119
|
+
domain: upSessions.cookie?.domain,
|
|
120
|
+
overwrite: true,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
ctx.cookies.set(cookieName, refresh.token, cookieOptions);
|
|
124
|
+
return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return ctx.send({
|
|
128
|
+
jwt: access.token,
|
|
129
|
+
refreshToken: refresh.token,
|
|
130
|
+
user: await sanitizeUser(user, ctx),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
93
134
|
return ctx.send({
|
|
94
135
|
jwt: getService('jwt').issue({ id: user.id }),
|
|
95
136
|
user: await sanitizeUser(user, ctx),
|
|
@@ -104,6 +145,43 @@ module.exports = {
|
|
|
104
145
|
throw new ForbiddenError('Your account has been blocked by an administrator');
|
|
105
146
|
}
|
|
106
147
|
|
|
148
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
149
|
+
if (mode === 'refresh') {
|
|
150
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
151
|
+
|
|
152
|
+
const refresh = await strapi
|
|
153
|
+
.sessionManager('users-permissions')
|
|
154
|
+
.generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });
|
|
155
|
+
|
|
156
|
+
const access = await strapi
|
|
157
|
+
.sessionManager('users-permissions')
|
|
158
|
+
.generateAccessToken(refresh.token);
|
|
159
|
+
if ('error' in access) {
|
|
160
|
+
throw new ApplicationError('Invalid credentials');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const upSessions = strapi.config.get('plugin::users-permissions.sessions');
|
|
164
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
165
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
166
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
167
|
+
const cookieOptions = {
|
|
168
|
+
httpOnly: true,
|
|
169
|
+
secure: Boolean(upSessions.cookie?.secure),
|
|
170
|
+
sameSite: upSessions.cookie?.sameSite ?? 'lax',
|
|
171
|
+
path: upSessions.cookie?.path ?? '/',
|
|
172
|
+
domain: upSessions.cookie?.domain,
|
|
173
|
+
overwrite: true,
|
|
174
|
+
};
|
|
175
|
+
ctx.cookies.set(cookieName, refresh.token, cookieOptions);
|
|
176
|
+
return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });
|
|
177
|
+
}
|
|
178
|
+
return ctx.send({
|
|
179
|
+
jwt: access.token,
|
|
180
|
+
refreshToken: refresh.token,
|
|
181
|
+
user: await sanitizeUser(user, ctx),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
107
185
|
return ctx.send({
|
|
108
186
|
jwt: getService('jwt').issue({ id: user.id }),
|
|
109
187
|
user: await sanitizeUser(user, ctx),
|
|
@@ -118,13 +196,17 @@ module.exports = {
|
|
|
118
196
|
throw new ApplicationError('You must be authenticated to reset your password');
|
|
119
197
|
}
|
|
120
198
|
|
|
121
|
-
const
|
|
199
|
+
const validations = strapi.config.get('plugin::users-permissions.validationRules');
|
|
122
200
|
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
201
|
+
const { currentPassword, password } = await validateChangePasswordBody(
|
|
202
|
+
ctx.request.body,
|
|
203
|
+
validations
|
|
126
204
|
);
|
|
127
205
|
|
|
206
|
+
const user = await strapi.db
|
|
207
|
+
.query('plugin::users-permissions.user')
|
|
208
|
+
.findOne({ where: { id: ctx.state.user.id } });
|
|
209
|
+
|
|
128
210
|
const validPassword = await getService('user').validatePassword(currentPassword, user.password);
|
|
129
211
|
|
|
130
212
|
if (!validPassword) {
|
|
@@ -137,22 +219,55 @@ module.exports = {
|
|
|
137
219
|
|
|
138
220
|
await getService('user').edit(user.id, { password });
|
|
139
221
|
|
|
140
|
-
|
|
222
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
223
|
+
if (mode === 'refresh') {
|
|
224
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
225
|
+
|
|
226
|
+
if (deviceId) {
|
|
227
|
+
// Invalidate sessions: specific device if deviceId provided
|
|
228
|
+
await strapi
|
|
229
|
+
.sessionManager('users-permissions')
|
|
230
|
+
.invalidateRefreshToken(String(user.id), deviceId);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const newDeviceId = deviceId || crypto.randomUUID();
|
|
234
|
+
const refresh = await strapi
|
|
235
|
+
.sessionManager('users-permissions')
|
|
236
|
+
.generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });
|
|
237
|
+
|
|
238
|
+
const access = await strapi
|
|
239
|
+
.sessionManager('users-permissions')
|
|
240
|
+
.generateAccessToken(refresh.token);
|
|
241
|
+
if ('error' in access) {
|
|
242
|
+
throw new ApplicationError('Invalid credentials');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return ctx.send({
|
|
246
|
+
jwt: access.token,
|
|
247
|
+
refreshToken: refresh.token,
|
|
248
|
+
user: await sanitizeUser(user, ctx),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return ctx.send({
|
|
141
253
|
jwt: getService('jwt').issue({ id: user.id }),
|
|
142
254
|
user: await sanitizeUser(user, ctx),
|
|
143
255
|
});
|
|
144
256
|
},
|
|
145
257
|
|
|
146
258
|
async resetPassword(ctx) {
|
|
259
|
+
const validations = strapi.config.get('plugin::users-permissions.validationRules');
|
|
260
|
+
|
|
147
261
|
const { password, passwordConfirmation, code } = await validateResetPasswordBody(
|
|
148
|
-
ctx.request.body
|
|
262
|
+
ctx.request.body,
|
|
263
|
+
validations
|
|
149
264
|
);
|
|
150
265
|
|
|
151
266
|
if (password !== passwordConfirmation) {
|
|
152
267
|
throw new ValidationError('Passwords do not match');
|
|
153
268
|
}
|
|
154
269
|
|
|
155
|
-
const user = await strapi
|
|
270
|
+
const user = await strapi.db
|
|
156
271
|
.query('plugin::users-permissions.user')
|
|
157
272
|
.findOne({ where: { resetPasswordToken: code } });
|
|
158
273
|
|
|
@@ -165,15 +280,113 @@ module.exports = {
|
|
|
165
280
|
password,
|
|
166
281
|
});
|
|
167
282
|
|
|
168
|
-
|
|
169
|
-
|
|
283
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
284
|
+
if (mode === 'refresh') {
|
|
285
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
286
|
+
|
|
287
|
+
if (deviceId) {
|
|
288
|
+
// Invalidate sessions: specific device if deviceId provided
|
|
289
|
+
await strapi
|
|
290
|
+
.sessionManager('users-permissions')
|
|
291
|
+
.invalidateRefreshToken(String(user.id), deviceId);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const newDeviceId = deviceId || crypto.randomUUID();
|
|
295
|
+
const refresh = await strapi
|
|
296
|
+
.sessionManager('users-permissions')
|
|
297
|
+
.generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });
|
|
298
|
+
|
|
299
|
+
const access = await strapi
|
|
300
|
+
.sessionManager('users-permissions')
|
|
301
|
+
.generateAccessToken(refresh.token);
|
|
302
|
+
if ('error' in access) {
|
|
303
|
+
throw new ApplicationError('Invalid credentials');
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return ctx.send({
|
|
307
|
+
jwt: access.token,
|
|
308
|
+
refreshToken: refresh.token,
|
|
309
|
+
user: await sanitizeUser(user, ctx),
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return ctx.send({
|
|
170
314
|
jwt: getService('jwt').issue({ id: user.id }),
|
|
171
315
|
user: await sanitizeUser(user, ctx),
|
|
172
316
|
});
|
|
173
317
|
},
|
|
318
|
+
async refresh(ctx) {
|
|
319
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
320
|
+
if (mode !== 'refresh') {
|
|
321
|
+
return ctx.notFound();
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
const { refreshToken } = ctx.request.body || {};
|
|
325
|
+
if (!refreshToken || typeof refreshToken !== 'string') {
|
|
326
|
+
return ctx.badRequest('Missing refresh token');
|
|
327
|
+
}
|
|
174
328
|
|
|
329
|
+
const rotation = await strapi
|
|
330
|
+
.sessionManager('users-permissions')
|
|
331
|
+
.rotateRefreshToken(refreshToken);
|
|
332
|
+
if ('error' in rotation) {
|
|
333
|
+
return ctx.unauthorized('Invalid refresh token');
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const result = await strapi
|
|
337
|
+
.sessionManager('users-permissions')
|
|
338
|
+
.generateAccessToken(rotation.token);
|
|
339
|
+
if ('error' in result) {
|
|
340
|
+
return ctx.unauthorized('Invalid refresh token');
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const upSessions = strapi.config.get('plugin::users-permissions.sessions');
|
|
344
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
345
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
346
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
347
|
+
const cookieOptions = {
|
|
348
|
+
httpOnly: true,
|
|
349
|
+
secure: Boolean(upSessions.cookie?.secure),
|
|
350
|
+
sameSite: upSessions.cookie?.sameSite ?? 'lax',
|
|
351
|
+
path: upSessions.cookie?.path ?? '/',
|
|
352
|
+
domain: upSessions.cookie?.domain,
|
|
353
|
+
overwrite: true,
|
|
354
|
+
};
|
|
355
|
+
ctx.cookies.set(cookieName, rotation.token, cookieOptions);
|
|
356
|
+
return ctx.send({ jwt: result.token });
|
|
357
|
+
}
|
|
358
|
+
return ctx.send({ jwt: result.token, refreshToken: rotation.token });
|
|
359
|
+
},
|
|
360
|
+
async logout(ctx) {
|
|
361
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
362
|
+
if (mode !== 'refresh') {
|
|
363
|
+
return ctx.notFound();
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Invalidate all sessions for the authenticated user, or by deviceId if provided
|
|
367
|
+
if (!ctx.state.user) {
|
|
368
|
+
return ctx.unauthorized('Missing authentication');
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
372
|
+
try {
|
|
373
|
+
await strapi
|
|
374
|
+
.sessionManager('users-permissions')
|
|
375
|
+
.invalidateRefreshToken(String(ctx.state.user.id), deviceId);
|
|
376
|
+
} catch (err) {
|
|
377
|
+
strapi.log.error('UP logout failed', err);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
const upSessions = strapi.config.get('plugin::users-permissions.sessions');
|
|
381
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
382
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
383
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
384
|
+
ctx.cookies.set(cookieName, '', { expires: new Date(0) });
|
|
385
|
+
}
|
|
386
|
+
return ctx.send({ ok: true });
|
|
387
|
+
},
|
|
175
388
|
async connect(ctx, next) {
|
|
176
|
-
const grant = require('grant
|
|
389
|
+
const grant = require('grant').koa();
|
|
177
390
|
|
|
178
391
|
const providers = await strapi
|
|
179
392
|
.store({ type: 'plugin', name: 'users-permissions', key: 'grant' })
|
|
@@ -201,10 +414,28 @@ module.exports = {
|
|
|
201
414
|
}
|
|
202
415
|
|
|
203
416
|
// Ability to pass OAuth callback dynamically
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
417
|
+
const queryCustomCallback = _.get(ctx, 'query.callback');
|
|
418
|
+
const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');
|
|
419
|
+
|
|
420
|
+
const customCallback = queryCustomCallback ?? dynamicSessionCallback;
|
|
421
|
+
|
|
422
|
+
// The custom callback is validated to make sure it's not redirecting to an unwanted actor.
|
|
423
|
+
if (customCallback !== undefined) {
|
|
424
|
+
try {
|
|
425
|
+
// We're extracting the callback validator from the plugin config since it can be user-customized
|
|
426
|
+
const { validate: validateCallback } = strapi
|
|
427
|
+
.plugin('users-permissions')
|
|
428
|
+
.config('callback');
|
|
429
|
+
|
|
430
|
+
await validateCallback(customCallback, grantConfig[provider]);
|
|
431
|
+
|
|
432
|
+
grantConfig[provider].callback = customCallback;
|
|
433
|
+
} catch (e) {
|
|
434
|
+
throw new ValidationError('Invalid callback URL provided', { callback: customCallback });
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Build a valid redirect URI for the current provider
|
|
208
439
|
grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);
|
|
209
440
|
|
|
210
441
|
return grant(grantConfig)(ctx, next);
|
|
@@ -219,7 +450,7 @@ module.exports = {
|
|
|
219
450
|
const advancedSettings = await pluginStore.get({ key: 'advanced' });
|
|
220
451
|
|
|
221
452
|
// Find the user by email.
|
|
222
|
-
const user = await strapi
|
|
453
|
+
const user = await strapi.db
|
|
223
454
|
.query('plugin::users-permissions.user')
|
|
224
455
|
.findOne({ where: { email: email.toLowerCase() } });
|
|
225
456
|
|
|
@@ -237,8 +468,8 @@ module.exports = {
|
|
|
237
468
|
resetPasswordSettings.message,
|
|
238
469
|
{
|
|
239
470
|
URL: advancedSettings.email_reset_password,
|
|
240
|
-
SERVER_URL:
|
|
241
|
-
ADMIN_URL:
|
|
471
|
+
SERVER_URL: strapi.config.get('server.absoluteUrl'),
|
|
472
|
+
ADMIN_URL: strapi.config.get('admin.absoluteUrl'),
|
|
242
473
|
USER: userInfo,
|
|
243
474
|
TOKEN: resetPasswordToken,
|
|
244
475
|
}
|
|
@@ -281,55 +512,32 @@ module.exports = {
|
|
|
281
512
|
throw new ApplicationError('Register action is currently disabled');
|
|
282
513
|
}
|
|
283
514
|
|
|
284
|
-
const { register } = strapi.config.get('plugin
|
|
515
|
+
const { register } = strapi.config.get('plugin::users-permissions');
|
|
285
516
|
const alwaysAllowedKeys = ['username', 'password', 'email'];
|
|
286
|
-
const userModel = strapi.contentTypes['plugin::users-permissions.user'];
|
|
287
|
-
const { attributes } = userModel;
|
|
288
|
-
|
|
289
|
-
const nonWritable = getNonWritableAttributes(userModel);
|
|
290
517
|
|
|
518
|
+
// Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration
|
|
291
519
|
const allowedKeys = compact(
|
|
292
|
-
concat(
|
|
293
|
-
alwaysAllowedKeys,
|
|
294
|
-
isArray(register?.allowedFields)
|
|
295
|
-
? // Note that we do not filter allowedFields in case a user explicitly chooses to allow a private or otherwise omitted field on registration
|
|
296
|
-
register.allowedFields // if null or undefined, compact will remove it
|
|
297
|
-
: // to prevent breaking changes, if allowedFields is not set in config, we only remove private and known dangerous user schema fields
|
|
298
|
-
// TODO V5: allowedFields defaults to [] when undefined and remove this case
|
|
299
|
-
Object.keys(attributes).filter(
|
|
300
|
-
(key) =>
|
|
301
|
-
!nonWritable.includes(key) &&
|
|
302
|
-
!attributes[key].private &&
|
|
303
|
-
![
|
|
304
|
-
// many of these are included in nonWritable, but we'll list them again to be safe and since we're removing this code in v5 anyway
|
|
305
|
-
// Strapi user schema fields
|
|
306
|
-
'confirmed',
|
|
307
|
-
'blocked',
|
|
308
|
-
'confirmationToken',
|
|
309
|
-
'resetPasswordToken',
|
|
310
|
-
'provider',
|
|
311
|
-
'id',
|
|
312
|
-
'role',
|
|
313
|
-
// other Strapi fields that might be added
|
|
314
|
-
'createdAt',
|
|
315
|
-
'updatedAt',
|
|
316
|
-
'createdBy',
|
|
317
|
-
'updatedBy',
|
|
318
|
-
'publishedAt', // d&p
|
|
319
|
-
'strapi_reviewWorkflows_stage', // review workflows
|
|
320
|
-
].includes(key)
|
|
321
|
-
)
|
|
322
|
-
)
|
|
520
|
+
concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : [])
|
|
323
521
|
);
|
|
324
522
|
|
|
523
|
+
// Check if there are any keys in requestBody that are not in allowedKeys
|
|
524
|
+
const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));
|
|
525
|
+
|
|
526
|
+
if (invalidKeys.length > 0) {
|
|
527
|
+
// If there are invalid keys, throw an error
|
|
528
|
+
throw new ValidationError(`Invalid parameters: ${invalidKeys.join(', ')}`);
|
|
529
|
+
}
|
|
530
|
+
|
|
325
531
|
const params = {
|
|
326
532
|
..._.pick(ctx.request.body, allowedKeys),
|
|
327
533
|
provider: 'local',
|
|
328
534
|
};
|
|
329
535
|
|
|
330
|
-
|
|
536
|
+
const validations = strapi.config.get('plugin::users-permissions.validationRules');
|
|
331
537
|
|
|
332
|
-
|
|
538
|
+
await validateRegisterBody(params, validations);
|
|
539
|
+
|
|
540
|
+
const role = await strapi.db
|
|
333
541
|
.query('plugin::users-permissions.role')
|
|
334
542
|
.findOne({ where: { type: settings.default_role } });
|
|
335
543
|
|
|
@@ -348,7 +556,7 @@ module.exports = {
|
|
|
348
556
|
],
|
|
349
557
|
};
|
|
350
558
|
|
|
351
|
-
const conflictingUserCount = await strapi.query('plugin::users-permissions.user').count({
|
|
559
|
+
const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({
|
|
352
560
|
where: { ...identifierFilter, provider },
|
|
353
561
|
});
|
|
354
562
|
|
|
@@ -357,7 +565,7 @@ module.exports = {
|
|
|
357
565
|
}
|
|
358
566
|
|
|
359
567
|
if (settings.unique_email) {
|
|
360
|
-
const conflictingUserCount = await strapi.query('plugin::users-permissions.user').count({
|
|
568
|
+
const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({
|
|
361
569
|
where: { ...identifierFilter },
|
|
362
570
|
});
|
|
363
571
|
|
|
@@ -382,18 +590,33 @@ module.exports = {
|
|
|
382
590
|
try {
|
|
383
591
|
await getService('user').sendConfirmationEmail(sanitizedUser);
|
|
384
592
|
} catch (err) {
|
|
385
|
-
|
|
593
|
+
strapi.log.error(err);
|
|
594
|
+
throw new ApplicationError('Error sending confirmation email');
|
|
386
595
|
}
|
|
387
596
|
|
|
388
597
|
return ctx.send({ user: sanitizedUser });
|
|
389
598
|
}
|
|
390
599
|
|
|
391
|
-
const
|
|
600
|
+
const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
601
|
+
if (mode === 'refresh') {
|
|
602
|
+
const deviceId = extractDeviceId(ctx.request.body) || crypto.randomUUID();
|
|
392
603
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
604
|
+
const refresh = await strapi
|
|
605
|
+
.sessionManager('users-permissions')
|
|
606
|
+
.generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });
|
|
607
|
+
|
|
608
|
+
const access = await strapi
|
|
609
|
+
.sessionManager('users-permissions')
|
|
610
|
+
.generateAccessToken(refresh.token);
|
|
611
|
+
if ('error' in access) {
|
|
612
|
+
throw new ApplicationError('Invalid credentials');
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
return ctx.send({ jwt: access.token, refreshToken: refresh.token, user: sanitizedUser });
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
const jwt = getService('jwt').issue(_.pick(user, ['id']));
|
|
619
|
+
return ctx.send({ jwt, user: sanitizedUser });
|
|
397
620
|
},
|
|
398
621
|
|
|
399
622
|
async emailConfirmation(ctx, next, returnUser) {
|
|
@@ -427,7 +650,7 @@ module.exports = {
|
|
|
427
650
|
async sendEmailConfirmation(ctx) {
|
|
428
651
|
const { email } = await validateSendEmailConfirmationBody(ctx.request.body);
|
|
429
652
|
|
|
430
|
-
const user = await strapi.query('plugin::users-permissions.user').findOne({
|
|
653
|
+
const user = await strapi.db.query('plugin::users-permissions.user').findOne({
|
|
431
654
|
where: { email: email.toLowerCase() },
|
|
432
655
|
});
|
|
433
656
|
|
|
@@ -450,4 +673,4 @@ module.exports = {
|
|
|
450
673
|
sent: true,
|
|
451
674
|
});
|
|
452
675
|
},
|
|
453
|
-
};
|
|
676
|
+
});
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const _ = require('lodash');
|
|
4
4
|
const { contentTypes: contentTypesUtils } = require('@strapi/utils');
|
|
5
|
-
const { ApplicationError,
|
|
6
|
-
require('@strapi/utils').errors;
|
|
5
|
+
const { ApplicationError, NotFoundError, ForbiddenError } = require('@strapi/utils').errors;
|
|
7
6
|
const { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');
|
|
8
7
|
|
|
9
8
|
const { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;
|
|
@@ -17,24 +16,25 @@ const ACTIONS = {
|
|
|
17
16
|
};
|
|
18
17
|
|
|
19
18
|
const findEntityAndCheckPermissions = async (ability, action, model, id) => {
|
|
20
|
-
const
|
|
21
|
-
where: { id },
|
|
19
|
+
const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {
|
|
22
20
|
populate: [`${CREATED_BY_ATTRIBUTE}.roles`],
|
|
23
21
|
});
|
|
24
22
|
|
|
25
|
-
if (_.isNil(
|
|
23
|
+
if (_.isNil(doc)) {
|
|
26
24
|
throw new NotFoundError();
|
|
27
25
|
}
|
|
28
26
|
|
|
29
|
-
const pm = strapi
|
|
27
|
+
const pm = strapi
|
|
28
|
+
.service('admin::permission')
|
|
29
|
+
.createPermissionsManager({ ability, action, model });
|
|
30
30
|
|
|
31
|
-
if (pm.ability.cannot(pm.action, pm.toSubject(
|
|
31
|
+
if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {
|
|
32
32
|
throw new ForbiddenError();
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
const
|
|
35
|
+
const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);
|
|
36
36
|
|
|
37
|
-
return { pm,
|
|
37
|
+
return { pm, doc: docWithoutCreatorRoles };
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
module.exports = {
|
|
@@ -48,7 +48,7 @@ module.exports = {
|
|
|
48
48
|
|
|
49
49
|
const { email, username } = body;
|
|
50
50
|
|
|
51
|
-
const pm = strapi.admin
|
|
51
|
+
const pm = strapi.service('admin::permission').createPermissionsManager({
|
|
52
52
|
ability: userAbility,
|
|
53
53
|
action: ACTIONS.create,
|
|
54
54
|
model: userModel,
|
|
@@ -66,7 +66,7 @@ module.exports = {
|
|
|
66
66
|
|
|
67
67
|
await validateCreateUserBody(ctx.request.body);
|
|
68
68
|
|
|
69
|
-
const userWithSameUsername = await strapi
|
|
69
|
+
const userWithSameUsername = await strapi.db
|
|
70
70
|
.query('plugin::users-permissions.user')
|
|
71
71
|
.findOne({ where: { username } });
|
|
72
72
|
|
|
@@ -75,7 +75,7 @@ module.exports = {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
if (advanced.unique_email) {
|
|
78
|
-
const userWithSameEmail = await strapi
|
|
78
|
+
const userWithSameEmail = await strapi.db
|
|
79
79
|
.query('plugin::users-permissions.user')
|
|
80
80
|
.findOne({ where: { email: email.toLowerCase() } });
|
|
81
81
|
|
|
@@ -93,18 +93,11 @@ module.exports = {
|
|
|
93
93
|
|
|
94
94
|
user.email = _.toLower(user.email);
|
|
95
95
|
|
|
96
|
-
if (!user.role) {
|
|
97
|
-
const defaultRole = await strapi
|
|
98
|
-
.query('plugin::users-permissions.role')
|
|
99
|
-
.findOne({ where: { type: advanced.default_role } });
|
|
100
|
-
|
|
101
|
-
user.role = defaultRole.id;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
96
|
try {
|
|
105
97
|
const data = await strapi
|
|
106
|
-
.service('plugin::content-manager.
|
|
107
|
-
.create(
|
|
98
|
+
.service('plugin::content-manager.document-manager')
|
|
99
|
+
.create(userModel, { data: user });
|
|
100
|
+
|
|
108
101
|
const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });
|
|
109
102
|
|
|
110
103
|
ctx.created(sanitizedData);
|
|
@@ -118,7 +111,7 @@ module.exports = {
|
|
|
118
111
|
*/
|
|
119
112
|
|
|
120
113
|
async update(ctx) {
|
|
121
|
-
const { id } = ctx.params;
|
|
114
|
+
const { id: documentId } = ctx.params;
|
|
122
115
|
const { body } = ctx.request;
|
|
123
116
|
const { user: admin, userAbility } = ctx.state;
|
|
124
117
|
|
|
@@ -128,38 +121,40 @@ module.exports = {
|
|
|
128
121
|
|
|
129
122
|
const { email, username, password } = body;
|
|
130
123
|
|
|
131
|
-
const { pm,
|
|
124
|
+
const { pm, doc } = await findEntityAndCheckPermissions(
|
|
132
125
|
userAbility,
|
|
133
126
|
ACTIONS.edit,
|
|
134
127
|
userModel,
|
|
135
|
-
|
|
128
|
+
documentId
|
|
136
129
|
);
|
|
137
|
-
|
|
130
|
+
|
|
131
|
+
const user = doc;
|
|
138
132
|
|
|
139
133
|
await validateUpdateUserBody(ctx.request.body);
|
|
140
134
|
|
|
141
|
-
if (_.has(body, 'password') &&
|
|
142
|
-
|
|
135
|
+
if (_.has(body, 'password') && (password == null || password === '')) {
|
|
136
|
+
delete body.password;
|
|
143
137
|
}
|
|
144
138
|
|
|
145
139
|
if (_.has(body, 'username')) {
|
|
146
|
-
const userWithSameUsername = await strapi
|
|
140
|
+
const userWithSameUsername = await strapi.db
|
|
147
141
|
.query('plugin::users-permissions.user')
|
|
148
142
|
.findOne({ where: { username } });
|
|
149
143
|
|
|
150
|
-
if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(id)) {
|
|
144
|
+
if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {
|
|
151
145
|
throw new ApplicationError('Username already taken');
|
|
152
146
|
}
|
|
153
147
|
}
|
|
154
148
|
|
|
155
149
|
if (_.has(body, 'email') && advancedConfigs.unique_email) {
|
|
156
|
-
const userWithSameEmail = await strapi
|
|
150
|
+
const userWithSameEmail = await strapi.db
|
|
157
151
|
.query('plugin::users-permissions.user')
|
|
158
152
|
.findOne({ where: { email: _.toLower(email) } });
|
|
159
153
|
|
|
160
|
-
if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(id)) {
|
|
154
|
+
if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {
|
|
161
155
|
throw new ApplicationError('Email already taken');
|
|
162
156
|
}
|
|
157
|
+
|
|
163
158
|
body.email = _.toLower(body.email);
|
|
164
159
|
}
|
|
165
160
|
|
|
@@ -167,8 +162,10 @@ module.exports = {
|
|
|
167
162
|
const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');
|
|
168
163
|
|
|
169
164
|
const data = await strapi
|
|
170
|
-
.service('plugin::content-manager.
|
|
171
|
-
.update(
|
|
165
|
+
.service('plugin::content-manager.document-manager')
|
|
166
|
+
.update(documentId, userModel, {
|
|
167
|
+
data: updateData,
|
|
168
|
+
});
|
|
172
169
|
|
|
173
170
|
ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });
|
|
174
171
|
},
|