@strapi/plugin-users-permissions 0.0.0-next.ce51df0e18404afc8a1aa7f504c1006a7a221459 → 0.0.0-next.ce84fada19d58a7dfbdd553035e6558f8befcba4

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.
Files changed (194) hide show
  1. package/.eslintignore +1 -2
  2. package/.eslintrc +17 -0
  3. package/LICENSE +18 -3
  4. package/admin/src/components/BoundRoute/{index.js → index.jsx} +2 -2
  5. package/admin/src/components/FormModal/Input/{index.js → index.jsx} +32 -31
  6. package/admin/src/components/FormModal/index.jsx +115 -0
  7. package/admin/src/components/Permissions/PermissionRow/{CheckboxWrapper.js → CheckboxWrapper.jsx} +4 -3
  8. package/admin/src/components/Permissions/PermissionRow/{SubCategory.js → SubCategory.jsx} +13 -22
  9. package/admin/src/components/Permissions/index.jsx +47 -0
  10. package/admin/src/components/Permissions/reducer.js +1 -1
  11. package/admin/src/components/Policies/{index.js → index.jsx} +7 -5
  12. package/admin/src/components/UsersPermissions/{index.js → index.jsx} +15 -7
  13. package/admin/src/components/UsersPermissions/reducer.js +1 -1
  14. package/admin/src/index.js +14 -23
  15. package/admin/src/pages/AdvancedSettings/index.jsx +214 -0
  16. package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
  17. package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
  18. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +156 -0
  19. package/admin/src/pages/EmailTemplates/components/{EmailTable.js → EmailTable.jsx} +20 -17
  20. package/admin/src/pages/EmailTemplates/{index.js → index.jsx} +36 -62
  21. package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
  22. package/admin/src/pages/Providers/{index.js → index.jsx} +98 -113
  23. package/admin/src/pages/Providers/utils/forms.js +11 -11
  24. package/admin/src/pages/Roles/constants.js +3 -3
  25. package/admin/src/pages/Roles/hooks/usePlugins.js +4 -4
  26. package/admin/src/pages/Roles/index.jsx +24 -0
  27. package/admin/src/pages/Roles/pages/{CreatePage.js → CreatePage.jsx} +64 -60
  28. package/admin/src/pages/Roles/pages/{EditPage.js → EditPage.jsx} +73 -69
  29. package/admin/src/pages/Roles/pages/ListPage/components/{TableBody.js → TableBody.jsx} +27 -31
  30. package/admin/src/pages/Roles/pages/ListPage/{index.js → index.jsx} +81 -55
  31. package/admin/src/translations/en.json +1 -1
  32. package/admin/src/utils/prefixPluginTranslations.js +13 -0
  33. package/dist/_chunks/ar-BguGUqwK.js +44 -0
  34. package/dist/_chunks/ar-BguGUqwK.js.map +1 -0
  35. package/dist/_chunks/ar-CK8BRRXB.mjs +44 -0
  36. package/dist/_chunks/ar-CK8BRRXB.mjs.map +1 -0
  37. package/dist/_chunks/cs-BVigMk0l.mjs +50 -0
  38. package/dist/_chunks/cs-BVigMk0l.mjs.map +1 -0
  39. package/dist/_chunks/cs-BW8-K_GY.js +50 -0
  40. package/dist/_chunks/cs-BW8-K_GY.js.map +1 -0
  41. package/dist/_chunks/de-BKUdRFI4.mjs +62 -0
  42. package/dist/_chunks/de-BKUdRFI4.mjs.map +1 -0
  43. package/dist/_chunks/de-owXpVluI.js +62 -0
  44. package/dist/_chunks/de-owXpVluI.js.map +1 -0
  45. package/dist/_chunks/dk-BQiTK50l.mjs +86 -0
  46. package/dist/_chunks/dk-BQiTK50l.mjs.map +1 -0
  47. package/dist/_chunks/dk-LXAnbuBk.js +86 -0
  48. package/dist/_chunks/dk-LXAnbuBk.js.map +1 -0
  49. package/dist/_chunks/en-DOHtPf-2.mjs +86 -0
  50. package/dist/_chunks/en-DOHtPf-2.mjs.map +1 -0
  51. package/dist/_chunks/en-MHo5mcsU.js +86 -0
  52. package/dist/_chunks/en-MHo5mcsU.js.map +1 -0
  53. package/dist/_chunks/es-BwLCLXAQ.js +86 -0
  54. package/dist/_chunks/es-BwLCLXAQ.js.map +1 -0
  55. package/dist/_chunks/es-DNgOVMjD.mjs +86 -0
  56. package/dist/_chunks/es-DNgOVMjD.mjs.map +1 -0
  57. package/dist/_chunks/fr-DkgRugiU.mjs +50 -0
  58. package/dist/_chunks/fr-DkgRugiU.mjs.map +1 -0
  59. package/dist/_chunks/fr-DkhpSjjm.js +50 -0
  60. package/dist/_chunks/fr-DkhpSjjm.js.map +1 -0
  61. package/dist/_chunks/id-BTemOeTZ.js +62 -0
  62. package/dist/_chunks/id-BTemOeTZ.js.map +1 -0
  63. package/dist/_chunks/id-BdEsvnaF.mjs +62 -0
  64. package/dist/_chunks/id-BdEsvnaF.mjs.map +1 -0
  65. package/dist/_chunks/index-BOrMKeRw.mjs +249 -0
  66. package/dist/_chunks/index-BOrMKeRw.mjs.map +1 -0
  67. package/dist/_chunks/index-Belq5KbY.js +1173 -0
  68. package/dist/_chunks/index-Belq5KbY.js.map +1 -0
  69. package/dist/_chunks/index-Bz6iwjmq.mjs +615 -0
  70. package/dist/_chunks/index-Bz6iwjmq.mjs.map +1 -0
  71. package/dist/_chunks/index-CD4fcjMf.js +638 -0
  72. package/dist/_chunks/index-CD4fcjMf.js.map +1 -0
  73. package/dist/_chunks/index-CNonxjKA.js +281 -0
  74. package/dist/_chunks/index-CNonxjKA.js.map +1 -0
  75. package/dist/_chunks/index-CuNna9c6.mjs +262 -0
  76. package/dist/_chunks/index-CuNna9c6.mjs.map +1 -0
  77. package/dist/_chunks/index-D5NoyXgv.js +366 -0
  78. package/dist/_chunks/index-D5NoyXgv.js.map +1 -0
  79. package/dist/_chunks/index-DGJ3FzF4.js +248 -0
  80. package/dist/_chunks/index-DGJ3FzF4.js.map +1 -0
  81. package/dist/_chunks/index-DThn8eCU.mjs +1143 -0
  82. package/dist/_chunks/index-DThn8eCU.mjs.map +1 -0
  83. package/dist/_chunks/index-Dk2iD2AC.mjs +344 -0
  84. package/dist/_chunks/index-Dk2iD2AC.mjs.map +1 -0
  85. package/dist/_chunks/index-TfyEeDrd-BfJxOAzF.mjs +11845 -0
  86. package/dist/_chunks/index-TfyEeDrd-BfJxOAzF.mjs.map +1 -0
  87. package/dist/_chunks/index-TfyEeDrd-QiBdpWEj.js +11869 -0
  88. package/dist/_chunks/index-TfyEeDrd-QiBdpWEj.js.map +1 -0
  89. package/dist/_chunks/it-B-rv0E24.mjs +62 -0
  90. package/dist/_chunks/it-B-rv0E24.mjs.map +1 -0
  91. package/dist/_chunks/it-D1rH6V6_.js +62 -0
  92. package/dist/_chunks/it-D1rH6V6_.js.map +1 -0
  93. package/dist/_chunks/ja-C8K-VBPD.mjs +48 -0
  94. package/dist/_chunks/ja-C8K-VBPD.mjs.map +1 -0
  95. package/dist/_chunks/ja-DqShgTMf.js +48 -0
  96. package/dist/_chunks/ja-DqShgTMf.js.map +1 -0
  97. package/dist/_chunks/ko-B9DGEPWH.js +86 -0
  98. package/dist/_chunks/ko-B9DGEPWH.js.map +1 -0
  99. package/dist/_chunks/ko-Busb0wIY.mjs +86 -0
  100. package/dist/_chunks/ko-Busb0wIY.mjs.map +1 -0
  101. package/dist/_chunks/ms-ByvsQjRt.mjs +49 -0
  102. package/dist/_chunks/ms-ByvsQjRt.mjs.map +1 -0
  103. package/dist/_chunks/ms-CPBU3LWf.js +49 -0
  104. package/dist/_chunks/ms-CPBU3LWf.js.map +1 -0
  105. package/dist/_chunks/nl-5qO8Rpcy.mjs +48 -0
  106. package/dist/_chunks/nl-5qO8Rpcy.mjs.map +1 -0
  107. package/dist/_chunks/nl-CwNB6YoO.js +48 -0
  108. package/dist/_chunks/nl-CwNB6YoO.js.map +1 -0
  109. package/dist/_chunks/pl-BdIzifBE.mjs +86 -0
  110. package/dist/_chunks/pl-BdIzifBE.mjs.map +1 -0
  111. package/dist/_chunks/pl-Do9UD69f.js +86 -0
  112. package/dist/_chunks/pl-Do9UD69f.js.map +1 -0
  113. package/dist/_chunks/pt-BIO24ioG.mjs +48 -0
  114. package/dist/_chunks/pt-BIO24ioG.mjs.map +1 -0
  115. package/dist/_chunks/pt-BR-D7dZhxuP.js +44 -0
  116. package/dist/_chunks/pt-BR-D7dZhxuP.js.map +1 -0
  117. package/dist/_chunks/pt-BR-f0p23AQZ.mjs +44 -0
  118. package/dist/_chunks/pt-BR-f0p23AQZ.mjs.map +1 -0
  119. package/dist/_chunks/pt-fdvyOnUp.js +48 -0
  120. package/dist/_chunks/pt-fdvyOnUp.js.map +1 -0
  121. package/dist/_chunks/ru-C94rjPGA.js +86 -0
  122. package/dist/_chunks/ru-C94rjPGA.js.map +1 -0
  123. package/dist/_chunks/ru-VWy-IB7K.mjs +86 -0
  124. package/dist/_chunks/ru-VWy-IB7K.mjs.map +1 -0
  125. package/dist/_chunks/sk-BABEhykl.js +50 -0
  126. package/dist/_chunks/sk-BABEhykl.js.map +1 -0
  127. package/dist/_chunks/sk-B_LIcepm.mjs +50 -0
  128. package/dist/_chunks/sk-B_LIcepm.mjs.map +1 -0
  129. package/dist/_chunks/sv-ABLKOokl.mjs +86 -0
  130. package/dist/_chunks/sv-ABLKOokl.mjs.map +1 -0
  131. package/dist/_chunks/sv-Be43LhA9.js +86 -0
  132. package/dist/_chunks/sv-Be43LhA9.js.map +1 -0
  133. package/dist/_chunks/th-DKyP7ueR.mjs +60 -0
  134. package/dist/_chunks/th-DKyP7ueR.mjs.map +1 -0
  135. package/dist/_chunks/th-DgVhVLhL.js +60 -0
  136. package/dist/_chunks/th-DgVhVLhL.js.map +1 -0
  137. package/dist/_chunks/tr-B_idhkEs.js +85 -0
  138. package/dist/_chunks/tr-B_idhkEs.js.map +1 -0
  139. package/dist/_chunks/tr-qa1Q5UjC.mjs +85 -0
  140. package/dist/_chunks/tr-qa1Q5UjC.mjs.map +1 -0
  141. package/dist/_chunks/uk-BmRqbeQc.mjs +49 -0
  142. package/dist/_chunks/uk-BmRqbeQc.mjs.map +1 -0
  143. package/dist/_chunks/uk-LHOivnhP.js +49 -0
  144. package/dist/_chunks/uk-LHOivnhP.js.map +1 -0
  145. package/dist/_chunks/vi-CdVRdKDw.js +50 -0
  146. package/dist/_chunks/vi-CdVRdKDw.js.map +1 -0
  147. package/dist/_chunks/vi-HW-EdMea.mjs +50 -0
  148. package/dist/_chunks/vi-HW-EdMea.mjs.map +1 -0
  149. package/dist/_chunks/zh-5hKkVPA4.mjs +86 -0
  150. package/dist/_chunks/zh-5hKkVPA4.mjs.map +1 -0
  151. package/dist/_chunks/zh-Cuq8gMnF.js +86 -0
  152. package/dist/_chunks/zh-Cuq8gMnF.js.map +1 -0
  153. package/dist/_chunks/zh-Hans-BHilK-yc.mjs +86 -0
  154. package/dist/_chunks/zh-Hans-BHilK-yc.mjs.map +1 -0
  155. package/dist/_chunks/zh-Hans-GQDMKtY4.js +86 -0
  156. package/dist/_chunks/zh-Hans-GQDMKtY4.js.map +1 -0
  157. package/dist/admin/index.js +4 -0
  158. package/dist/admin/index.js.map +1 -0
  159. package/dist/admin/index.mjs +5 -0
  160. package/dist/admin/index.mjs.map +1 -0
  161. package/package.json +46 -27
  162. package/packup.config.ts +22 -0
  163. package/server/bootstrap/index.js +18 -50
  164. package/server/bootstrap/users-permissions-actions.js +6 -0
  165. package/server/config.js +29 -0
  166. package/server/content-types/user/index.js +0 -1
  167. package/server/controllers/auth.js +53 -60
  168. package/server/controllers/content-manager-user.js +28 -30
  169. package/server/controllers/role.js +1 -1
  170. package/server/controllers/user.js +8 -9
  171. package/server/middlewares/rateLimit.js +1 -1
  172. package/server/register.js +1 -1
  173. package/server/services/jwt.js +3 -3
  174. package/server/services/permission.js +3 -7
  175. package/server/services/providers-registry.js +469 -261
  176. package/server/services/providers.js +10 -5
  177. package/server/services/role.js +15 -13
  178. package/server/services/user.js +56 -19
  179. package/server/services/users-permissions.js +15 -13
  180. package/server/utils/index.d.ts +2 -1
  181. package/server/utils/sanitize/sanitizers.js +7 -3
  182. package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +2 -2
  183. package/.eslintrc.js +0 -14
  184. package/admin/src/components/FormModal/index.js +0 -126
  185. package/admin/src/components/Permissions/index.js +0 -55
  186. package/admin/src/pages/AdvancedSettings/index.js +0 -259
  187. package/admin/src/pages/EmailTemplates/components/EmailForm.js +0 -176
  188. package/admin/src/pages/Roles/index.js +0 -33
  189. package/admin/src/pages/Roles/pages/ListPage/utils/api.js +0 -30
  190. package/server/bootstrap/grant-config.js +0 -131
  191. package/strapi-admin.js +0 -3
  192. package/strapi-server.js +0 -3
  193. /package/admin/src/components/Permissions/PermissionRow/{index.js → index.jsx} +0 -0
  194. /package/admin/src/contexts/UsersPermissionsContext/{index.js → index.jsx} +0 -0
@@ -0,0 +1,86 @@
1
+ const zhHans = {
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
+ };
83
+ export {
84
+ zhHans as default
85
+ };
86
+ //# sourceMappingURL=zh-Hans-BHilK-yc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zh-Hans-BHilK-yc.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const zhHans = {
4
+ "BoundRoute.title": "绑定路由到",
5
+ "EditForm.inputSelect.description.role": "新验证身份的用户将被赋予所选角色。",
6
+ "EditForm.inputSelect.label.role": "认证用户的默认角色",
7
+ "EditForm.inputToggle.description.email": "不允许用户使用不同的认证提供商但相同的电子邮件地址来创建多个账户。",
8
+ "EditForm.inputToggle.description.email-confirmation": "启用(开)后,新注册的用户会收到一封确认电子邮件。",
9
+ "EditForm.inputToggle.description.email-confirmation-redirection": "确认您的电子邮件后,选择将您重定向到的位置。",
10
+ "EditForm.inputToggle.description.email-reset-password": "应用程序的重置密码页面的网址",
11
+ "EditForm.inputToggle.description.sign-up": "当禁用(关)时,注册过程将被禁止。任何人无论使用任何的供应商都不可以订阅。",
12
+ "EditForm.inputToggle.label.email": "每个电子邮件地址对应一个账户",
13
+ "EditForm.inputToggle.label.email-confirmation": "启用电子邮件确认",
14
+ "EditForm.inputToggle.label.email-confirmation-redirection": "重定向网址",
15
+ "EditForm.inputToggle.label.email-reset-password": "重置密码页面网址",
16
+ "EditForm.inputToggle.label.sign-up": "启用注册",
17
+ "EditForm.inputToggle.placeholder.email-confirmation-redirection": "例如: https://yourfrontend.com/email-confirmation-redirection",
18
+ "EditForm.inputToggle.placeholder.email-reset-password": "例如: https://yourfrontend.com/reset-password",
19
+ "EditPage.form.roles": "角色详情",
20
+ "Email.template.data.loaded": "电子邮件模板已加载",
21
+ "Email.template.email_confirmation": "邮箱地址确认",
22
+ "Email.template.form.edit.label": "编辑模板",
23
+ "Email.template.table.action.label": "操作",
24
+ "Email.template.table.icon.label": "图标",
25
+ "Email.template.table.name.label": "名称",
26
+ "Form.advancedSettings.data.loaded": "高级设置数据已加载",
27
+ "HeaderNav.link.advancedSettings": "高级设置",
28
+ "HeaderNav.link.emailTemplates": "电子邮件模板",
29
+ "HeaderNav.link.providers": "提供商",
30
+ "Plugin.permissions.plugins.description": "定义 {name} 插件所有允许的操作。",
31
+ "Plugins.header.description": "下面只列出路由绑定的操作。",
32
+ "Plugins.header.title": "权限",
33
+ "Policies.header.hint": "选择应用程序或插件对应的操作,然后点击齿轮图标显示绑定的路由",
34
+ "Policies.header.title": "高级设置",
35
+ "PopUpForm.Email.email_templates.inputDescription": "如果你不确定如何使用变量, {link}",
36
+ "PopUpForm.Email.link.documentation": "查看我们的文档",
37
+ "PopUpForm.Email.options.from.email.label": "发件人地址",
38
+ "PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
39
+ "PopUpForm.Email.options.from.name.label": "发件人名称",
40
+ "PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
41
+ "PopUpForm.Email.options.message.label": "消息",
42
+ "PopUpForm.Email.options.object.label": "主题",
43
+ "PopUpForm.Email.options.object.placeholder": "请为%APP_NAME%确认邮箱地址",
44
+ "PopUpForm.Email.options.response_email.label": "回复邮件",
45
+ "PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
46
+ "PopUpForm.Providers.enabled.description": "如果禁用,用户将无法使用此供应商。",
47
+ "PopUpForm.Providers.enabled.label": "启用",
48
+ "PopUpForm.Providers.key.label": "客户端 ID",
49
+ "PopUpForm.Providers.key.placeholder": "文本",
50
+ "PopUpForm.Providers.redirectURL.front-end.label": "重定向网址",
51
+ "PopUpForm.Providers.redirectURL.label": "添加到{provider}应用配置的跳转网址",
52
+ "PopUpForm.Providers.secret.label": "客户端秘钥",
53
+ "PopUpForm.Providers.secret.placeholder": "文本",
54
+ "PopUpForm.Providers.subdomain.label": "主机URI(子域名)",
55
+ "PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
56
+ "PopUpForm.header.edit.email-templates": "编辑电子邮件模版",
57
+ "PopUpForm.header.edit.providers": "编辑提供商",
58
+ "Providers.data.loaded": "提供商已加载",
59
+ "Providers.status": "状态",
60
+ "Roles.empty": "您还没有任何角色。",
61
+ "Roles.empty.search": "没有与搜索相匹配的角色。",
62
+ "Settings.roles.deleted": "角色已被删除",
63
+ "Settings.roles.edited": "角色编辑完成",
64
+ "Settings.section-label": "用户及权限插件",
65
+ "components.Input.error.validation.email": "这是一个无效的电子邮件",
66
+ "components.Input.error.validation.json": "这不符合JSON格式",
67
+ "components.Input.error.validation.max": "值过高。",
68
+ "components.Input.error.validation.maxLength": "值过长。",
69
+ "components.Input.error.validation.min": "值太低。",
70
+ "components.Input.error.validation.minLength": "值太短。",
71
+ "components.Input.error.validation.minSupMax": "不能超过上限",
72
+ "components.Input.error.validation.regex": "该值不符合正则表达式。",
73
+ "components.Input.error.validation.required": "该值为必填项。",
74
+ "components.Input.error.validation.unique": "该值已被使用。",
75
+ "notification.success.submit": "设置已被更新",
76
+ "page.title": "设置 - 角色",
77
+ "plugin.description.long": "使用基于 JWT 的完整身份验证过程来保护 API。这个插件还有一个 ACL 策略,允许你管理用户组之间的权限。",
78
+ "plugin.description.short": "使用基于 JWT 的完整身份验证过程保护 API",
79
+ "plugin.name": "用户及权限插件",
80
+ "popUpWarning.button.cancel": "取消",
81
+ "popUpWarning.button.confirm": "确认",
82
+ "popUpWarning.title": "请确认",
83
+ "popUpWarning.warning.cancel": "你确定你要取消你的修改?"
84
+ };
85
+ exports.default = zhHans;
86
+ //# sourceMappingURL=zh-Hans-GQDMKtY4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zh-Hans-GQDMKtY4.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ const index = require("../_chunks/index-DGJ3FzF4.js");
3
+ module.exports = index.index;
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,5 @@
1
+ import { i } from "../_chunks/index-BOrMKeRw.mjs";
2
+ export {
3
+ i as default
4
+ };
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/plugin-users-permissions",
3
- "version": "0.0.0-next.ce51df0e18404afc8a1aa7f504c1006a7a221459",
3
+ "version": "0.0.0-next.ce84fada19d58a7dfbdd553035e6558f8befcba4",
4
4
  "description": "Protect your API with a full-authentication process based on JWT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,55 +19,74 @@
19
19
  "url": "https://strapi.io"
20
20
  }
21
21
  ],
22
+ "exports": {
23
+ "./strapi-admin": {
24
+ "source": "./admin/src/index.js",
25
+ "import": "./dist/admin/index.mjs",
26
+ "require": "./dist/admin/index.js",
27
+ "default": "./dist/admin/index.js"
28
+ },
29
+ "./strapi-server": {
30
+ "source": "./server/index.js",
31
+ "require": "./server/index.js",
32
+ "default": "./server/index.js"
33
+ },
34
+ "./package.json": "./package.json"
35
+ },
22
36
  "scripts": {
23
- "test:unit": "run -T jest",
24
- "test:unit:watch": "run -T jest --watch",
37
+ "build": "pack-up build",
38
+ "clean": "run -T rimraf dist",
39
+ "lint": "run -T eslint .",
25
40
  "test:front": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js",
26
- "test:front:watch": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js --watchAll",
27
41
  "test:front:ce": "run -T cross-env IS_EE=false jest --config ./jest.config.front.js",
42
+ "test:front:watch": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js --watchAll",
28
43
  "test:front:watch:ce": "run -T cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll",
29
- "lint": "run -T eslint ."
44
+ "test:unit": "run -T jest",
45
+ "test:unit:watch": "run -T jest --watch",
46
+ "watch": "pack-up watch"
30
47
  },
31
48
  "dependencies": {
32
- "@strapi/design-system": "1.9.0",
33
- "@strapi/helper-plugin": "0.0.0-next.ce51df0e18404afc8a1aa7f504c1006a7a221459",
34
- "@strapi/icons": "1.9.0",
35
- "@strapi/utils": "0.0.0-next.ce51df0e18404afc8a1aa7f504c1006a7a221459",
49
+ "@strapi/design-system": "2.0.0-rc.11",
50
+ "@strapi/icons": "2.0.0-rc.11",
51
+ "@strapi/utils": "0.0.0-next.ce84fada19d58a7dfbdd553035e6558f8befcba4",
36
52
  "bcryptjs": "2.4.3",
37
- "formik": "2.4.0",
53
+ "formik": "2.4.5",
38
54
  "grant-koa": "5.4.8",
39
- "immer": "9.0.19",
55
+ "immer": "9.0.21",
40
56
  "jsonwebtoken": "9.0.0",
41
57
  "jwk-to-pem": "2.0.5",
42
- "koa": "2.13.4",
43
- "koa2-ratelimit": "^1.1.2",
58
+ "koa": "2.15.2",
59
+ "koa2-ratelimit": "^1.1.3",
44
60
  "lodash": "4.17.21",
45
61
  "prop-types": "^15.8.1",
46
62
  "purest": "4.0.2",
47
- "react-intl": "6.4.1",
63
+ "react-intl": "6.6.2",
48
64
  "react-query": "3.39.3",
49
- "react-redux": "8.1.1",
65
+ "react-redux": "8.1.3",
50
66
  "url-join": "4.0.1",
51
67
  "yup": "0.32.9"
52
68
  },
53
69
  "devDependencies": {
54
- "@testing-library/dom": "9.2.0",
55
- "@testing-library/react": "14.0.0",
56
- "@testing-library/user-event": "14.4.3",
57
- "msw": "1.2.1",
58
- "react": "^18.2.0",
59
- "react-dom": "^18.2.0",
60
- "react-router-dom": "5.3.4",
61
- "styled-components": "5.3.3"
70
+ "@strapi/pack-up": "5.0.0",
71
+ "@strapi/strapi": "0.0.0-next.ce84fada19d58a7dfbdd553035e6558f8befcba4",
72
+ "@testing-library/dom": "10.1.0",
73
+ "@testing-library/react": "15.0.7",
74
+ "@testing-library/user-event": "14.5.2",
75
+ "msw": "1.3.0",
76
+ "react": "18.3.1",
77
+ "react-dom": "18.3.1",
78
+ "react-router-dom": "6.22.3",
79
+ "styled-components": "6.1.8"
62
80
  },
63
81
  "peerDependencies": {
82
+ "@strapi/strapi": "^5.0.0 || ^5.0.0-beta || ^5.0.0-alpha || ^5.0.0-rc",
64
83
  "react": "^17.0.0 || ^18.0.0",
65
84
  "react-dom": "^17.0.0 || ^18.0.0",
66
- "react-router-dom": "5.3.4",
67
- "styled-components": "5.3.3"
85
+ "react-router-dom": "^6.0.0",
86
+ "styled-components": "^6.0.0"
68
87
  },
69
88
  "engines": {
70
- "node": ">=16.0.0 <=20.x.x",
89
+ "node": ">=18.0.0 <=20.x.x",
71
90
  "npm": ">=6.0.0"
72
91
  },
73
92
  "strapi": {
@@ -77,5 +96,5 @@
77
96
  "required": true,
78
97
  "kind": "plugin"
79
98
  },
80
- "gitHead": "ce51df0e18404afc8a1aa7f504c1006a7a221459"
99
+ "gitHead": "ce84fada19d58a7dfbdd553035e6558f8befcba4"
81
100
  }
@@ -0,0 +1,22 @@
1
+ import { Config, defineConfig } from '@strapi/pack-up';
2
+ import { transformWithEsbuild } from 'vite';
3
+
4
+ const config: Config = defineConfig({
5
+ bundles: [
6
+ {
7
+ source: './admin/src/index.js',
8
+ import: './dist/admin/index.mjs',
9
+ require: './dist/admin/index.js',
10
+ runtime: 'web',
11
+ },
12
+ ],
13
+ dist: './dist',
14
+ /**
15
+ * Because we're exporting a server & client package
16
+ * which have different runtimes we want to ignore
17
+ * what they look like in the package.json
18
+ */
19
+ exports: {},
20
+ });
21
+
22
+ export default config;
@@ -9,25 +9,26 @@
9
9
  */
10
10
  const crypto = require('crypto');
11
11
  const _ = require('lodash');
12
- const urljoin = require('url-join');
13
- const { isArray } = require('lodash/fp');
14
12
  const { getService } = require('../utils');
15
- const getGrantConfig = require('./grant-config');
16
-
17
13
  const usersPermissionsActions = require('./users-permissions-actions');
18
- const userSchema = require('../content-types/user');
19
14
 
20
15
  const initGrant = async (pluginStore) => {
21
- const apiPrefix = strapi.config.get('api.rest.prefix');
22
- const baseURL = urljoin(strapi.config.server.url, apiPrefix, 'auth');
16
+ const allProviders = getService('providers-registry').getAll();
17
+
18
+ const grantConfig = Object.entries(allProviders).reduce((acc, [name, provider]) => {
19
+ const { icon, enabled, grantConfig } = provider;
23
20
 
24
- const grantConfig = getGrantConfig(baseURL);
21
+ acc[name] = {
22
+ icon,
23
+ enabled,
24
+ ...grantConfig,
25
+ };
26
+ return acc;
27
+ }, {});
25
28
 
26
29
  const prevGrantConfig = (await pluginStore.get({ key: 'grant' })) || {};
27
- // store grant auth config to db
28
- // when plugin_users-permissions_grant is not existed in db
29
- // or we have added/deleted provider here.
30
- if (!prevGrantConfig || !_.isEqual(_.keys(prevGrantConfig), _.keys(grantConfig))) {
30
+
31
+ if (!prevGrantConfig || !_.isEqual(prevGrantConfig, grantConfig)) {
31
32
  // merge with the previous provider config.
32
33
  _.keys(grantConfig).forEach((key) => {
33
34
  if (key in prevGrantConfig) {
@@ -99,26 +100,6 @@ const initAdvancedOptions = async (pluginStore) => {
99
100
  }
100
101
  };
101
102
 
102
- const userSchemaAdditions = () => {
103
- const defaultSchema = Object.keys(userSchema.attributes);
104
- const currentSchema = Object.keys(
105
- strapi.contentTypes['plugin::users-permissions.user'].attributes
106
- );
107
-
108
- // Some dynamic fields may not have been initialized yet, so we need to ignore them
109
- // TODO: we should have a global method for finding these
110
- const ignoreDiffs = [
111
- 'createdBy',
112
- 'createdAt',
113
- 'updatedBy',
114
- 'updatedAt',
115
- 'publishedAt',
116
- 'strapi_reviewWorkflows_stage',
117
- ];
118
-
119
- return currentSchema.filter((key) => !(ignoreDiffs.includes(key) || defaultSchema.includes(key)));
120
- };
121
-
122
103
  module.exports = async ({ strapi }) => {
123
104
  const pluginStore = strapi.store({ type: 'plugin', name: 'users-permissions' });
124
105
 
@@ -126,13 +107,13 @@ module.exports = async ({ strapi }) => {
126
107
  await initEmails(pluginStore);
127
108
  await initAdvancedOptions(pluginStore);
128
109
 
129
- await strapi.admin.services.permission.actionProvider.registerMany(
130
- usersPermissionsActions.actions
131
- );
110
+ await strapi
111
+ .service('admin::permission')
112
+ .actionProvider.registerMany(usersPermissionsActions.actions);
132
113
 
133
114
  await getService('users-permissions').initialize();
134
115
 
135
- if (!strapi.config.get('plugin.users-permissions.jwtSecret')) {
116
+ if (!strapi.config.get('plugin::users-permissions.jwtSecret')) {
136
117
  if (process.env.NODE_ENV !== 'development') {
137
118
  throw new Error(
138
119
  `Missing jwtSecret. Please, set configuration variable "jwtSecret" for the users-permissions plugin in config/plugins.js (ex: you can generate one using Node with \`crypto.randomBytes(16).toString('base64')\`).
@@ -142,7 +123,7 @@ For security reasons, prefer storing the secret in an environment variable and r
142
123
 
143
124
  const jwtSecret = crypto.randomBytes(16).toString('base64');
144
125
 
145
- strapi.config.set('plugin.users-permissions.jwtSecret', jwtSecret);
126
+ strapi.config.set('plugin::users-permissions.jwtSecret', jwtSecret);
146
127
 
147
128
  if (!process.env.JWT_SECRET) {
148
129
  const envPath = process.env.ENV_PATH || '.env';
@@ -152,17 +133,4 @@ For security reasons, prefer storing the secret in an environment variable and r
152
133
  );
153
134
  }
154
135
  }
155
-
156
- // TODO v5: Remove this block of code and default allowedFields to empty array
157
- if (!isArray(strapi.config.get('plugin.users-permissions.register.allowedFields'))) {
158
- const modifications = userSchemaAdditions();
159
- if (modifications.length > 0) {
160
- // if there is a potential vulnerability, show a warning
161
- strapi.log.warn(
162
- `Users-permissions registration has defaulted to accepting the following additional user fields during registration: ${modifications.join(
163
- ','
164
- )}`
165
- );
166
- }
167
- }
168
136
  };
@@ -16,6 +16,12 @@ module.exports = {
16
16
  uid: 'roles.read',
17
17
  subCategory: 'roles',
18
18
  pluginName: 'users-permissions',
19
+ aliases: [
20
+ {
21
+ actionId: 'plugin::content-manager.explorer.read',
22
+ subjects: ['plugin::users-permissions.role'],
23
+ },
24
+ ],
19
25
  },
20
26
  {
21
27
  section: 'plugins',
package/server/config.js CHANGED
@@ -18,6 +18,35 @@ module.exports = {
18
18
  },
19
19
  },
20
20
  },
21
+ callback: {
22
+ validate(callback, provider) {
23
+ let uCallback;
24
+ let uProviderCallback;
25
+
26
+ try {
27
+ uCallback = new URL(callback);
28
+ uProviderCallback = new URL(provider.callback);
29
+ } catch {
30
+ throw new Error('The callback is not a valid URL');
31
+ }
32
+
33
+ // Make sure the different origin matches
34
+ if (uCallback.origin !== uProviderCallback.origin) {
35
+ throw new Error(
36
+ `Forbidden callback provided: origins don't match. Please verify your config.`
37
+ );
38
+ }
39
+
40
+ // Make sure the different pathname matches
41
+ if (uCallback.pathname !== uProviderCallback.pathname) {
42
+ throw new Error(
43
+ `Forbidden callback provided: pathname don't match. Please verify your config.`
44
+ );
45
+ }
46
+
47
+ // NOTE: We're not checking the search parameters on purpose to allow passing different states
48
+ },
49
+ },
21
50
  }),
22
51
  validator() {},
23
52
  };
@@ -12,7 +12,6 @@ module.exports = {
12
12
  displayName: 'User',
13
13
  },
14
14
  options: {
15
- draftAndPublish: false,
16
15
  timestamps: true,
17
16
  },
18
17
  attributes: {