@strapi/plugin-users-permissions 4.0.0-next.6 → 4.0.0

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 (196) hide show
  1. package/admin/src/components/BoundRoute/getMethodColor.js +41 -0
  2. package/admin/src/components/BoundRoute/index.js +40 -24
  3. package/admin/src/components/FormModal/Input/index.js +121 -0
  4. package/admin/src/components/FormModal/index.js +123 -0
  5. package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.js +19 -26
  6. package/admin/src/components/Permissions/PermissionRow/SubCategory.js +118 -0
  7. package/admin/src/components/Permissions/PermissionRow/index.js +9 -48
  8. package/admin/src/components/Permissions/index.js +36 -24
  9. package/admin/src/components/Permissions/init.js +1 -6
  10. package/admin/src/components/Policies/index.js +46 -47
  11. package/admin/src/components/UsersPermissions/index.js +29 -26
  12. package/admin/src/components/UsersPermissions/init.js +1 -2
  13. package/admin/src/hooks/useFetchRole/index.js +17 -7
  14. package/admin/src/hooks/useForm/index.js +3 -29
  15. package/admin/src/hooks/useForm/reducer.js +2 -21
  16. package/admin/src/hooks/usePlugins/index.js +12 -21
  17. package/admin/src/hooks/usePlugins/reducer.js +0 -3
  18. package/admin/src/index.js +29 -34
  19. package/admin/src/pages/AdvancedSettings/index.js +210 -193
  20. package/admin/src/pages/AdvancedSettings/utils/api.js +13 -0
  21. package/admin/src/pages/AdvancedSettings/utils/layout.js +96 -0
  22. package/admin/src/pages/AdvancedSettings/utils/schema.js +22 -0
  23. package/admin/src/pages/EmailTemplates/components/EmailForm.js +173 -0
  24. package/admin/src/pages/EmailTemplates/components/EmailTable.js +116 -0
  25. package/admin/src/pages/EmailTemplates/index.js +125 -198
  26. package/admin/src/pages/EmailTemplates/utils/api.js +13 -0
  27. package/admin/src/pages/Providers/index.js +208 -216
  28. package/admin/src/pages/Providers/utils/api.js +21 -0
  29. package/admin/src/pages/Providers/utils/forms.js +168 -126
  30. package/admin/src/pages/Roles/CreatePage/index.js +155 -147
  31. package/admin/src/pages/Roles/EditPage/index.js +162 -134
  32. package/admin/src/pages/Roles/ListPage/components/TableBody.js +96 -0
  33. package/admin/src/pages/Roles/ListPage/index.js +176 -156
  34. package/admin/src/pages/Roles/ListPage/utils/api.js +28 -0
  35. package/admin/src/pages/Roles/index.js +14 -8
  36. package/admin/src/permissions.js +12 -14
  37. package/admin/src/translations/ar.json +0 -8
  38. package/admin/src/translations/cs.json +0 -8
  39. package/admin/src/translations/de.json +0 -8
  40. package/admin/src/translations/dk.json +0 -8
  41. package/admin/src/translations/en.json +33 -12
  42. package/admin/src/translations/es.json +0 -8
  43. package/admin/src/translations/fr.json +0 -8
  44. package/admin/src/translations/id.json +0 -8
  45. package/admin/src/translations/it.json +0 -8
  46. package/admin/src/translations/ja.json +0 -8
  47. package/admin/src/translations/ko.json +0 -8
  48. package/admin/src/translations/ms.json +0 -8
  49. package/admin/src/translations/nl.json +0 -8
  50. package/admin/src/translations/pl.json +0 -8
  51. package/admin/src/translations/pt-BR.json +0 -8
  52. package/admin/src/translations/pt.json +0 -8
  53. package/admin/src/translations/ru.json +0 -8
  54. package/admin/src/translations/sk.json +0 -8
  55. package/admin/src/translations/sv.json +0 -8
  56. package/admin/src/translations/th.json +0 -8
  57. package/admin/src/translations/tr.json +0 -8
  58. package/admin/src/translations/uk.json +0 -8
  59. package/admin/src/translations/vi.json +0 -8
  60. package/admin/src/translations/zh-Hans.json +5 -14
  61. package/admin/src/translations/zh.json +0 -8
  62. package/admin/src/utils/axiosInstance.js +36 -0
  63. package/admin/src/utils/formatPluginName.js +26 -0
  64. package/admin/src/utils/index.js +1 -0
  65. package/documentation/1.0.0/overrides/users-permissions-Role.json +6 -6
  66. package/documentation/1.0.0/overrides/users-permissions-User.json +7 -7
  67. package/package.json +30 -29
  68. package/{config/functions/bootstrap.js → server/bootstrap/index.js} +26 -33
  69. package/{config → server/bootstrap}/users-permissions-actions.js +0 -0
  70. package/server/config.js +23 -0
  71. package/server/content-types/index.js +11 -0
  72. package/server/content-types/permission/index.js +34 -0
  73. package/server/content-types/role/index.js +51 -0
  74. package/server/content-types/user/index.js +72 -0
  75. package/{models/User.config.js → server/content-types/user/schema-config.js} +0 -0
  76. package/server/controllers/auth.js +440 -0
  77. package/server/controllers/content-manager-user.js +183 -0
  78. package/server/controllers/index.js +17 -0
  79. package/server/controllers/permissions.js +26 -0
  80. package/server/controllers/role.js +77 -0
  81. package/server/controllers/settings.js +85 -0
  82. package/server/controllers/user.js +191 -0
  83. package/server/controllers/validation/auth.js +29 -0
  84. package/{controllers → server/controllers}/validation/email-template.js +0 -0
  85. package/server/controllers/validation/user.js +38 -0
  86. package/server/graphql/index.js +44 -0
  87. package/server/graphql/mutations/auth/email-confirmation.js +39 -0
  88. package/server/graphql/mutations/auth/forgot-password.js +38 -0
  89. package/server/graphql/mutations/auth/login.js +38 -0
  90. package/server/graphql/mutations/auth/register.js +39 -0
  91. package/server/graphql/mutations/auth/reset-password.js +41 -0
  92. package/server/graphql/mutations/crud/role/create-role.js +37 -0
  93. package/server/graphql/mutations/crud/role/delete-role.js +28 -0
  94. package/server/graphql/mutations/crud/role/update-role.js +38 -0
  95. package/server/graphql/mutations/crud/user/create-user.js +48 -0
  96. package/server/graphql/mutations/crud/user/delete-user.js +42 -0
  97. package/server/graphql/mutations/crud/user/update-user.js +49 -0
  98. package/server/graphql/mutations/index.js +42 -0
  99. package/server/graphql/queries/index.js +13 -0
  100. package/server/graphql/queries/me.js +17 -0
  101. package/server/graphql/resolvers-configs.js +37 -0
  102. package/server/graphql/types/create-role-payload.js +11 -0
  103. package/server/graphql/types/delete-role-payload.js +11 -0
  104. package/server/graphql/types/index.js +21 -0
  105. package/server/graphql/types/login-input.js +13 -0
  106. package/server/graphql/types/login-payload.js +12 -0
  107. package/server/graphql/types/me-role.js +14 -0
  108. package/server/graphql/types/me.js +16 -0
  109. package/server/graphql/types/password-payload.js +11 -0
  110. package/server/graphql/types/register-input.js +13 -0
  111. package/server/graphql/types/update-role-payload.js +11 -0
  112. package/server/graphql/utils.js +27 -0
  113. package/server/index.js +21 -0
  114. package/server/middlewares/index.js +7 -0
  115. package/{config/policies → server/middlewares}/rateLimit.js +4 -8
  116. package/server/register.js +11 -0
  117. package/server/routes/admin/index.js +10 -0
  118. package/server/routes/admin/permissions.js +20 -0
  119. package/server/routes/admin/role.js +79 -0
  120. package/server/routes/admin/settings.js +95 -0
  121. package/server/routes/content-api/auth.js +73 -0
  122. package/server/routes/content-api/index.js +11 -0
  123. package/server/routes/content-api/permissions.js +9 -0
  124. package/server/routes/content-api/role.js +29 -0
  125. package/server/routes/content-api/user.js +61 -0
  126. package/server/routes/index.js +6 -0
  127. package/server/services/index.js +15 -0
  128. package/server/services/jwt.js +55 -0
  129. package/server/services/providers.js +599 -0
  130. package/server/services/role.js +177 -0
  131. package/{services → server/services}/user.js +32 -35
  132. package/server/services/users-permissions.js +233 -0
  133. package/server/strategies/users-permissions.js +123 -0
  134. package/{utils → server/utils}/index.d.ts +6 -1
  135. package/server/utils/index.js +9 -0
  136. package/strapi-admin.js +3 -0
  137. package/strapi-server.js +3 -0
  138. package/admin/src/assets/images/logo.svg +0 -1
  139. package/admin/src/components/BaselineAlignement/index.js +0 -33
  140. package/admin/src/components/Bloc/index.js +0 -10
  141. package/admin/src/components/BoundRoute/Components.js +0 -78
  142. package/admin/src/components/ContainerFluid/index.js +0 -13
  143. package/admin/src/components/FormBloc/index.js +0 -61
  144. package/admin/src/components/IntlInput/index.js +0 -38
  145. package/admin/src/components/ListBaselineAlignment/index.js +0 -8
  146. package/admin/src/components/ListRow/Components.js +0 -74
  147. package/admin/src/components/ListRow/index.js +0 -35
  148. package/admin/src/components/ModalForm/Wrapper.js +0 -12
  149. package/admin/src/components/ModalForm/index.js +0 -59
  150. package/admin/src/components/Permissions/ListWrapper.js +0 -9
  151. package/admin/src/components/Permissions/PermissionRow/BaselineAlignment.js +0 -7
  152. package/admin/src/components/Permissions/PermissionRow/RowStyle.js +0 -28
  153. package/admin/src/components/Permissions/PermissionRow/SubCategory/ConditionsButtonWrapper.js +0 -13
  154. package/admin/src/components/Permissions/PermissionRow/SubCategory/PolicyWrapper.js +0 -8
  155. package/admin/src/components/Permissions/PermissionRow/SubCategory/SubCategoryWrapper.js +0 -26
  156. package/admin/src/components/Permissions/PermissionRow/SubCategory/index.js +0 -116
  157. package/admin/src/components/Policies/Components.js +0 -26
  158. package/admin/src/components/PrefixedIcon/index.js +0 -27
  159. package/admin/src/components/Roles/EmptyRole/BaselineAlignment.js +0 -7
  160. package/admin/src/components/Roles/EmptyRole/index.js +0 -27
  161. package/admin/src/components/Roles/RoleListWrapper/index.js +0 -17
  162. package/admin/src/components/Roles/RoleRow/RoleDescription.js +0 -9
  163. package/admin/src/components/Roles/RoleRow/index.js +0 -45
  164. package/admin/src/components/Roles/index.js +0 -3
  165. package/admin/src/components/SizedInput/index.js +0 -24
  166. package/admin/src/pages/AdvancedSettings/reducer.js +0 -65
  167. package/admin/src/pages/AdvancedSettings/utils/form.js +0 -52
  168. package/admin/src/pages/EmailTemplates/CustomTextInput.js +0 -105
  169. package/admin/src/pages/EmailTemplates/Wrapper.js +0 -36
  170. package/admin/src/pages/EmailTemplates/reducer.js +0 -58
  171. package/admin/src/pages/EmailTemplates/utils/forms.js +0 -81
  172. package/admin/src/pages/Roles/ListPage/BaselineAlignment.js +0 -8
  173. package/config/layout.js +0 -10
  174. package/config/policies/isAuthenticated.js +0 -9
  175. package/config/policies/permissions.js +0 -94
  176. package/config/request.json +0 -6
  177. package/config/routes.json +0 -381
  178. package/config/schema.graphql.js +0 -284
  179. package/config/security.json +0 -5
  180. package/controllers/auth.js +0 -596
  181. package/controllers/user/admin.js +0 -230
  182. package/controllers/user/api.js +0 -174
  183. package/controllers/user.js +0 -117
  184. package/controllers/users-permissions.js +0 -271
  185. package/middlewares/users-permissions/defaults.json +0 -5
  186. package/middlewares/users-permissions/index.js +0 -40
  187. package/models/Permission.js +0 -7
  188. package/models/Permission.settings.json +0 -45
  189. package/models/Role.js +0 -7
  190. package/models/Role.settings.json +0 -43
  191. package/models/User.js +0 -7
  192. package/models/User.settings.json +0 -63
  193. package/services/jwt.js +0 -65
  194. package/services/providers.js +0 -598
  195. package/services/users-permissions.js +0 -429
  196. package/utils/index.js +0 -11
@@ -1,230 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
- const { contentTypes: contentTypesUtils } = require('@strapi/utils');
5
-
6
- const { getService } = require('../../utils');
7
-
8
- const { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;
9
-
10
- const formatError = error => [
11
- { messages: [{ id: error.id, message: error.message, field: error.field }] },
12
- ];
13
-
14
- const userModel = 'plugins::users-permissions.user';
15
- const ACTIONS = {
16
- read: 'plugins::content-manager.explorer.read',
17
- create: 'plugins::content-manager.explorer.create',
18
- edit: 'plugins::content-manager.explorer.update',
19
- delete: 'plugins::content-manager.explorer.delete',
20
- };
21
-
22
- const findEntityAndCheckPermissions = async (ability, action, model, id) => {
23
- const entity = await strapi.query('plugins::users-permissions.user').findOne({ where: { id } });
24
-
25
- if (_.isNil(entity)) {
26
- throw strapi.errors.notFound();
27
- }
28
-
29
- const pm = strapi.admin.services.permission.createPermissionsManager({ ability, action, model });
30
-
31
- const roles = _.has(entity, `${CREATED_BY_ATTRIBUTE}.id`)
32
- ? await strapi.query('strapi::role').findMany({
33
- where: {
34
- users: { id: entity[CREATED_BY_ATTRIBUTE].id },
35
- },
36
- })
37
- : [];
38
-
39
- const entityWithRoles = _.set(_.cloneDeep(entity), `${CREATED_BY_ATTRIBUTE}.roles`, roles);
40
-
41
- if (pm.ability.cannot(pm.action, pm.toSubject(entityWithRoles))) {
42
- throw strapi.errors.forbidden();
43
- }
44
-
45
- return { pm, entity };
46
- };
47
-
48
- module.exports = {
49
- /**
50
- * Create a/an user record.
51
- * @return {Object}
52
- */
53
- async create(ctx) {
54
- const {
55
- request: { body },
56
- state: { userAbility, admin },
57
- } = ctx;
58
- const { email, username, password } = body;
59
-
60
- const pm = strapi.admin.services.permission.createPermissionsManager({
61
- ability: userAbility,
62
- action: ACTIONS.create,
63
- model: userModel,
64
- });
65
-
66
- if (!pm.isAllowed) {
67
- throw strapi.errors.forbidden();
68
- }
69
-
70
- const sanitizedBody = pm.pickPermittedFieldsOf(body, { subject: userModel });
71
-
72
- const advanced = await strapi
73
- .store({
74
- environment: '',
75
- type: 'plugin',
76
- name: 'users-permissions',
77
- key: 'advanced',
78
- })
79
- .get();
80
-
81
- if (!email) return ctx.badRequest('missing.email');
82
- if (!username) return ctx.badRequest('missing.username');
83
- if (!password) return ctx.badRequest('missing.password');
84
-
85
- const userWithSameUsername = await strapi
86
- .query('plugins::users-permissions.user')
87
- .findOne({ where: { username } });
88
-
89
- if (userWithSameUsername) {
90
- return ctx.badRequest(
91
- null,
92
- formatError({
93
- id: 'Auth.form.error.username.taken',
94
- message: 'Username already taken.',
95
- field: ['username'],
96
- })
97
- );
98
- }
99
-
100
- if (advanced.unique_email) {
101
- const userWithSameEmail = await strapi
102
- .query('plugins::users-permissions.user')
103
- .findOne({ where: { email: email.toLowerCase() } });
104
-
105
- if (userWithSameEmail) {
106
- return ctx.badRequest(
107
- null,
108
-
109
- formatError({
110
- id: 'Auth.form.error.email.taken',
111
- message: 'Email already taken.',
112
- field: ['email'],
113
- })
114
- );
115
- }
116
- }
117
-
118
- const user = {
119
- ...sanitizedBody,
120
- provider: 'local',
121
- [CREATED_BY_ATTRIBUTE]: admin.id,
122
- [UPDATED_BY_ATTRIBUTE]: admin.id,
123
- };
124
-
125
- user.email = user.email.toLowerCase();
126
-
127
- if (!user.role) {
128
- const defaultRole = await strapi
129
- .query('plugins::users-permissions.role')
130
- .findOne({ where: { type: advanced.default_role } });
131
-
132
- user.role = defaultRole.id;
133
- }
134
-
135
- try {
136
- const data = await strapi.plugins['users-permissions'].services.user.add(user);
137
-
138
- ctx.created(pm.sanitize(data, { action: ACTIONS.read }));
139
- } catch (error) {
140
- ctx.badRequest(null, formatError(error));
141
- }
142
- },
143
- /**
144
- * Update a/an user record.
145
- * @return {Object}
146
- */
147
-
148
- async update(ctx) {
149
- const advancedConfigs = await strapi
150
- .store({
151
- environment: '',
152
- type: 'plugin',
153
- name: 'users-permissions',
154
- key: 'advanced',
155
- })
156
- .get();
157
-
158
- const {
159
- params: { id },
160
- request: { body },
161
- state: { userAbility, admin },
162
- } = ctx;
163
- const { email, username, password } = body;
164
-
165
- const { pm, entity: user } = await findEntityAndCheckPermissions(
166
- userAbility,
167
- ACTIONS.edit,
168
- userModel,
169
- id
170
- );
171
-
172
- if (_.has(body, 'email') && !email) {
173
- return ctx.badRequest('email.notNull');
174
- }
175
-
176
- if (_.has(body, 'username') && !username) {
177
- return ctx.badRequest('username.notNull');
178
- }
179
-
180
- if (_.has(body, 'password') && !password && user.provider === 'local') {
181
- return ctx.badRequest('password.notNull');
182
- }
183
-
184
- if (_.has(body, 'username')) {
185
- const userWithSameUsername = await strapi
186
- .query('plugins::users-permissions.user')
187
- .findOne({ where: { username } });
188
-
189
- if (userWithSameUsername && userWithSameUsername.id != id) {
190
- return ctx.badRequest(
191
- null,
192
- formatError({
193
- id: 'Auth.form.error.username.taken',
194
- message: 'username.alreadyTaken.',
195
- field: ['username'],
196
- })
197
- );
198
- }
199
- }
200
-
201
- if (_.has(body, 'email') && advancedConfigs.unique_email) {
202
- const userWithSameEmail = await strapi
203
- .query('plugins::users-permissions.user')
204
- .findOne({ where: { email: email.toLowerCase() } });
205
-
206
- if (userWithSameEmail && userWithSameEmail.id != id) {
207
- return ctx.badRequest(
208
- null,
209
- formatError({
210
- id: 'Auth.form.error.email.taken',
211
- message: 'Email already taken',
212
- field: ['email'],
213
- })
214
- );
215
- }
216
- body.email = body.email.toLowerCase();
217
- }
218
-
219
- const sanitizedData = pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });
220
- const updateData = _.omit({ ...sanitizedData, updated_by: admin.id }, 'created_by');
221
-
222
- if (_.has(body, 'password') && password === user.password) {
223
- delete updateData.password;
224
- }
225
-
226
- const data = await getService('user').edit({ id }, updateData);
227
-
228
- ctx.body = pm.sanitize(data, { action: ACTIONS.read });
229
- },
230
- };
@@ -1,174 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
- const { sanitizeEntity } = require('@strapi/utils');
5
- const { getService } = require('../../utils');
6
-
7
- const sanitizeUser = user =>
8
- sanitizeEntity(user, {
9
- model: strapi.getModel('plugins::users-permissions.user'),
10
- });
11
-
12
- const formatError = error => [
13
- { messages: [{ id: error.id, message: error.message, field: error.field }] },
14
- ];
15
-
16
- module.exports = {
17
- /**
18
- * Create a/an user record.
19
- * @return {Object}
20
- */
21
- async create(ctx) {
22
- const advanced = await strapi
23
- .store({
24
- environment: '',
25
- type: 'plugin',
26
- name: 'users-permissions',
27
- key: 'advanced',
28
- })
29
- .get();
30
-
31
- const { email, username, password, role } = ctx.request.body;
32
-
33
- if (!email) return ctx.badRequest('missing.email');
34
- if (!username) return ctx.badRequest('missing.username');
35
- if (!password) return ctx.badRequest('missing.password');
36
-
37
- const userWithSameUsername = await strapi
38
- .query('plugins::users-permissions.user')
39
- .findOne({ where: { username } });
40
-
41
- if (userWithSameUsername) {
42
- return ctx.badRequest(
43
- null,
44
- formatError({
45
- id: 'Auth.form.error.username.taken',
46
- message: 'Username already taken.',
47
- field: ['username'],
48
- })
49
- );
50
- }
51
-
52
- if (advanced.unique_email) {
53
- const userWithSameEmail = await strapi
54
- .query('plugins::users-permissions.user')
55
- .findOne({ where: { email: email.toLowerCase() } });
56
-
57
- if (userWithSameEmail) {
58
- return ctx.badRequest(
59
- null,
60
-
61
- formatError({
62
- id: 'Auth.form.error.email.taken',
63
- message: 'Email already taken.',
64
- field: ['email'],
65
- })
66
- );
67
- }
68
- }
69
-
70
- const user = {
71
- ...ctx.request.body,
72
- provider: 'local',
73
- };
74
-
75
- user.email = user.email.toLowerCase();
76
-
77
- if (!role) {
78
- const defaultRole = await strapi
79
- .query('plugins::users-permissions.role')
80
- .findOne({ where: { type: advanced.default_role } });
81
-
82
- user.role = defaultRole.id;
83
- }
84
-
85
- try {
86
- const data = await getService('user').add(user);
87
-
88
- ctx.created(sanitizeUser(data));
89
- } catch (error) {
90
- ctx.badRequest(null, formatError(error));
91
- }
92
- },
93
- /**
94
- * Update a/an user record.
95
- * @return {Object}
96
- */
97
-
98
- async update(ctx) {
99
- const advancedConfigs = await strapi
100
- .store({
101
- environment: '',
102
- type: 'plugin',
103
- name: 'users-permissions',
104
- key: 'advanced',
105
- })
106
- .get();
107
-
108
- const { id } = ctx.params;
109
- const { email, username, password } = ctx.request.body;
110
-
111
- const user = await getService('user').fetch({
112
- id,
113
- });
114
-
115
- if (_.has(ctx.request.body, 'email') && !email) {
116
- return ctx.badRequest('email.notNull');
117
- }
118
-
119
- if (_.has(ctx.request.body, 'username') && !username) {
120
- return ctx.badRequest('username.notNull');
121
- }
122
-
123
- if (_.has(ctx.request.body, 'password') && !password && user.provider === 'local') {
124
- return ctx.badRequest('password.notNull');
125
- }
126
-
127
- if (_.has(ctx.request.body, 'username')) {
128
- const userWithSameUsername = await strapi
129
- .query('plugins::users-permissions.user')
130
- .findOne({ where: { username } });
131
-
132
- if (userWithSameUsername && userWithSameUsername.id != id) {
133
- return ctx.badRequest(
134
- null,
135
- formatError({
136
- id: 'Auth.form.error.username.taken',
137
- message: 'username.alreadyTaken.',
138
- field: ['username'],
139
- })
140
- );
141
- }
142
- }
143
-
144
- if (_.has(ctx.request.body, 'email') && advancedConfigs.unique_email) {
145
- const userWithSameEmail = await strapi
146
- .query('plugins::users-permissions.user')
147
- .findOne({ where: { email: email.toLowerCase() } });
148
-
149
- if (userWithSameEmail && userWithSameEmail.id != id) {
150
- return ctx.badRequest(
151
- null,
152
- formatError({
153
- id: 'Auth.form.error.email.taken',
154
- message: 'Email already taken',
155
- field: ['email'],
156
- })
157
- );
158
- }
159
- ctx.request.body.email = ctx.request.body.email.toLowerCase();
160
- }
161
-
162
- let updateData = {
163
- ...ctx.request.body,
164
- };
165
-
166
- if (_.has(ctx.request.body, 'password') && password === user.password) {
167
- delete updateData.password;
168
- }
169
-
170
- const data = await getService('user').edit({ id }, updateData);
171
-
172
- ctx.send(sanitizeUser(data));
173
- },
174
- };
@@ -1,117 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * User.js controller
5
- *
6
- * @description: A set of functions called "actions" for managing `User`.
7
- */
8
-
9
- const _ = require('lodash');
10
- const { sanitizeEntity } = require('@strapi/utils');
11
- const { getService } = require('../utils');
12
- const adminUserController = require('./user/admin');
13
- const apiUserController = require('./user/api');
14
-
15
- const sanitizeUser = user =>
16
- sanitizeEntity(user, {
17
- model: strapi.getModel('plugins::users-permissions.user'),
18
- });
19
-
20
- const resolveController = ctx => {
21
- const {
22
- state: { isAuthenticatedAdmin },
23
- } = ctx;
24
-
25
- return isAuthenticatedAdmin ? adminUserController : apiUserController;
26
- };
27
-
28
- const resolveControllerMethod = method => ctx => {
29
- const controller = resolveController(ctx);
30
- const callbackFn = controller[method];
31
-
32
- if (!_.isFunction(callbackFn)) {
33
- return ctx.notFound();
34
- }
35
-
36
- return callbackFn(ctx);
37
- };
38
-
39
- module.exports = {
40
- create: resolveControllerMethod('create'),
41
- update: resolveControllerMethod('update'),
42
-
43
- /**
44
- * Retrieve user records.
45
- * @return {Object|Array}
46
- */
47
- async find(ctx, next, { populate } = {}) {
48
- const users = await getService('user').fetchAll(ctx.query, populate);
49
-
50
- ctx.body = users.map(sanitizeUser);
51
- },
52
-
53
- /**
54
- * Retrieve a user record.
55
- * @return {Object}
56
- */
57
- async findOne(ctx) {
58
- const { id } = ctx.params;
59
- let data = await getService('user').fetch({ id });
60
-
61
- if (data) {
62
- data = sanitizeUser(data);
63
- }
64
-
65
- // Send 200 `ok`
66
- ctx.body = data;
67
- },
68
-
69
- /**
70
- * Retrieve user count.
71
- * @return {Number}
72
- */
73
- async count(ctx) {
74
- ctx.body = await getService('user').count(ctx.query);
75
- },
76
-
77
- /**
78
- * Destroy a/an user record.
79
- * @return {Object}
80
- */
81
- async destroy(ctx) {
82
- const { id } = ctx.params;
83
-
84
- const data = await getService('user').remove({ id });
85
-
86
- ctx.send(sanitizeUser(data));
87
- },
88
-
89
- async destroyAll(ctx) {
90
- const {
91
- request: { query },
92
- } = ctx;
93
-
94
- const toRemove = Object.values(_.omit(query, 'source'));
95
-
96
- // FIXME: delete many
97
- const finalQuery = { id: toRemove };
98
-
99
- const data = await getService('user').removeAll(finalQuery);
100
-
101
- ctx.send(data);
102
- },
103
-
104
- /**
105
- * Retrieve authenticated user.
106
- * @return {Object|Array}
107
- */
108
- async me(ctx) {
109
- const user = ctx.state.user;
110
-
111
- if (!user) {
112
- return ctx.badRequest(null, [{ messages: [{ id: 'No authorization header was found' }] }]);
113
- }
114
-
115
- ctx.body = sanitizeUser(user);
116
- },
117
- };