@strapi/plugin-users-permissions 4.0.0-next.1 → 4.0.0-next.13

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 (74) hide show
  1. package/admin/src/index.js +31 -28
  2. package/admin/src/pages/AdvancedSettings/index.js +14 -2
  3. package/admin/src/pages/AdvancedSettings/utils/form.js +2 -2
  4. package/admin/src/pages/EmailTemplates/index.js +8 -1
  5. package/admin/src/pages/Providers/index.js +8 -1
  6. package/admin/src/pages/Roles/CreatePage/index.js +1 -1
  7. package/admin/src/pages/Roles/EditPage/index.js +2 -2
  8. package/admin/src/pages/Roles/ListPage/index.js +1 -1
  9. package/admin/src/pages/Roles/index.js +14 -8
  10. package/admin/src/permissions.js +12 -14
  11. package/admin/src/translations/en.json +4 -0
  12. package/admin/src/translations/zh-Hans.json +26 -7
  13. package/documentation/1.0.0/overrides/users-permissions-Role.json +6 -6
  14. package/package.json +8 -6
  15. package/{config/functions/bootstrap.js → server/bootstrap/index.js} +9 -18
  16. package/{config → server/bootstrap}/users-permissions-actions.js +0 -0
  17. package/server/config.js +23 -0
  18. package/server/content-types/index.js +11 -0
  19. package/server/content-types/permission/index.js +31 -0
  20. package/server/content-types/role/index.js +48 -0
  21. package/server/content-types/user/index.js +72 -0
  22. package/{models/User.config.js → server/content-types/user/schema-config.js} +0 -0
  23. package/{controllers → server/controllers}/auth.js +63 -77
  24. package/server/controllers/index.js +15 -0
  25. package/server/controllers/permissions.js +26 -0
  26. package/server/controllers/role.js +77 -0
  27. package/server/controllers/settings.js +84 -0
  28. package/{controllers → server/controllers}/user/admin.js +26 -42
  29. package/{controllers → server/controllers}/user/api.js +11 -27
  30. package/{controllers → server/controllers}/user.js +2 -18
  31. package/{controllers → server/controllers}/validation/email-template.js +0 -0
  32. package/server/index.js +21 -0
  33. package/server/policies/index.js +7 -0
  34. package/{config → server}/policies/rateLimit.js +4 -8
  35. package/server/register.js +7 -0
  36. package/server/routes/admin/index.js +10 -0
  37. package/server/routes/admin/permissions.js +20 -0
  38. package/server/routes/admin/role.js +79 -0
  39. package/server/routes/admin/settings.js +95 -0
  40. package/server/routes/content-api/auth.js +73 -0
  41. package/server/routes/content-api/index.js +11 -0
  42. package/server/routes/content-api/permissions.js +9 -0
  43. package/server/routes/content-api/role.js +29 -0
  44. package/server/routes/content-api/user.js +61 -0
  45. package/server/routes/index.js +6 -0
  46. package/{config → server}/schema.graphql.js +96 -63
  47. package/server/services/index.js +15 -0
  48. package/{services → server/services}/jwt.js +12 -14
  49. package/server/services/providers.js +592 -0
  50. package/server/services/role.js +182 -0
  51. package/{services → server/services}/user.js +31 -34
  52. package/server/services/users-permissions.js +222 -0
  53. package/server/strategies/users-permissions.js +122 -0
  54. package/{utils → server/utils}/index.d.ts +6 -1
  55. package/server/utils/index.js +9 -0
  56. package/strapi-server.js +3 -0
  57. package/config/layout.js +0 -10
  58. package/config/policies/isAuthenticated.js +0 -9
  59. package/config/policies/permissions.js +0 -94
  60. package/config/request.json +0 -6
  61. package/config/routes.json +0 -381
  62. package/config/security.json +0 -5
  63. package/controllers/users-permissions.js +0 -271
  64. package/middlewares/users-permissions/defaults.json +0 -5
  65. package/middlewares/users-permissions/index.js +0 -40
  66. package/models/Permission.js +0 -7
  67. package/models/Permission.settings.json +0 -45
  68. package/models/Role.js +0 -7
  69. package/models/Role.settings.json +0 -43
  70. package/models/User.js +0 -7
  71. package/models/User.settings.json +0 -63
  72. package/services/providers.js +0 -598
  73. package/services/users-permissions.js +0 -430
  74. package/utils/index.js +0 -11
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ module.exports = [
4
+ {
5
+ method: 'GET',
6
+ path: '/permissions',
7
+ handler: 'permissions.getPermissions',
8
+ },
9
+ ];
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ module.exports = [
4
+ {
5
+ method: 'GET',
6
+ path: '/roles/:id',
7
+ handler: 'role.getRole',
8
+ },
9
+ {
10
+ method: 'GET',
11
+ path: '/roles',
12
+ handler: 'role.getRoles',
13
+ },
14
+ {
15
+ method: 'POST',
16
+ path: '/roles',
17
+ handler: 'role.createRole',
18
+ },
19
+ {
20
+ method: 'PUT',
21
+ path: '/roles/:role',
22
+ handler: 'role.updateRole',
23
+ },
24
+ {
25
+ method: 'DELETE',
26
+ path: '/roles/:role',
27
+ handler: 'role.deleteRole',
28
+ },
29
+ ];
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ module.exports = [
4
+ {
5
+ method: 'GET',
6
+ path: '/users/count',
7
+ handler: 'user.count',
8
+ config: {
9
+ prefix: '',
10
+ },
11
+ },
12
+ {
13
+ method: 'GET',
14
+ path: '/users',
15
+ handler: 'user.find',
16
+ config: {
17
+ auth: {},
18
+ prefix: '',
19
+ },
20
+ },
21
+ {
22
+ method: 'GET',
23
+ path: '/users/me',
24
+ handler: 'user.me',
25
+ config: {
26
+ prefix: '',
27
+ },
28
+ },
29
+ {
30
+ method: 'GET',
31
+ path: '/users/:id',
32
+ handler: 'user.findOne',
33
+ config: {
34
+ prefix: '',
35
+ },
36
+ },
37
+ {
38
+ method: 'POST',
39
+ path: '/users',
40
+ handler: 'user.create',
41
+ config: {
42
+ prefix: '',
43
+ },
44
+ },
45
+ {
46
+ method: 'PUT',
47
+ path: '/users/:id',
48
+ handler: 'user.update',
49
+ config: {
50
+ prefix: '',
51
+ },
52
+ },
53
+ {
54
+ method: 'DELETE',
55
+ path: '/users/:id',
56
+ handler: 'user.destroy',
57
+ config: {
58
+ prefix: '',
59
+ },
60
+ },
61
+ ];
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ admin: require('./admin'),
5
+ 'content-api': require('./content-api'),
6
+ };
@@ -72,29 +72,31 @@ module.exports = {
72
72
  resolver: {
73
73
  Query: {
74
74
  me: {
75
- resolver: 'plugins::users-permissions.user.me',
75
+ resolver: 'plugin::users-permissions.user.me',
76
76
  },
77
77
  role: {
78
- resolverOf: 'plugins::users-permissions.users-permissions.getRole',
79
- resolver: async (obj, options, { context }) => {
78
+ resolverOf: 'plugin::users-permissions.users-permissions.getRole',
79
+ async resolver(obj, options, { context }) {
80
80
  context.params = { ...context.params, ...options.input };
81
81
 
82
- await strapi.plugins['users-permissions'].controllers['users-permissions'].getRole(
83
- context
84
- );
82
+ await strapi
83
+ .plugin('users-permissions')
84
+ .controller('users-permissions')
85
+ .getRole(context);
85
86
 
86
87
  return context.body.role;
87
88
  },
88
89
  },
89
90
  roles: {
90
91
  description: `Retrieve all the existing roles. You can't apply filters on this query.`,
91
- resolverOf: 'plugins::users-permissions.users-permissions.getRoles', // Apply the `getRoles` permissions on the resolver.
92
- resolver: async (obj, options, { context }) => {
92
+ resolverOf: 'plugin::users-permissions.users-permissions.getRoles', // Apply the `getRoles` permissions on the resolver.
93
+ async resolver(obj, options, { context }) {
93
94
  context.params = { ...context.params, ...options.input };
94
95
 
95
- await strapi.plugins['users-permissions'].controllers['users-permissions'].getRoles(
96
- context
97
- );
96
+ await strapi
97
+ .plugin('users-permissions')
98
+ .controller('users-permissions')
99
+ .getRoles(context);
98
100
 
99
101
  return context.body.roles;
100
102
  },
@@ -103,87 +105,102 @@ module.exports = {
103
105
  Mutation: {
104
106
  createRole: {
105
107
  description: 'Create a new role',
106
- resolverOf: 'plugins::users-permissions.users-permissions.createRole',
107
- resolver: async (obj, options, { context }) => {
108
- await strapi.plugins['users-permissions'].controllers['users-permissions'].createRole(
109
- context
110
- );
108
+ resolverOf: 'plugin::users-permissions.users-permissions.createRole',
109
+ async resolver(obj, options, { context }) {
110
+ await strapi
111
+ .plugin('users-permissions')
112
+ .controller('users-permissions')
113
+ .createRole(context);
111
114
 
112
115
  return { ok: true };
113
116
  },
114
117
  },
115
118
  updateRole: {
116
119
  description: 'Update an existing role',
117
- resolverOf: 'plugins::users-permissions.users-permissions.updateRole',
118
- resolver: async (obj, options, { context }) => {
120
+ resolverOf: 'plugin::users-permissions.users-permissions.updateRole',
121
+ async resolver(obj, options, { context }) {
119
122
  context.params = { ...context.params, ...options.input };
120
123
  context.params.role = context.params.id;
121
124
 
122
- await strapi.plugins['users-permissions'].controllers['users-permissions'].updateRole(
123
- context
124
- );
125
+ await strapi
126
+ .plugin('users-permissions')
127
+ .controller('users-permissions')
128
+ .updateRole(context);
125
129
 
126
130
  return { ok: true };
127
131
  },
128
132
  },
129
133
  deleteRole: {
130
134
  description: 'Delete an existing role',
131
- resolverOf: 'plugins::users-permissions.users-permissions.deleteRole',
132
- resolver: async (obj, options, { context }) => {
135
+ resolverOf: 'plugin::users-permissions.users-permissions.deleteRole',
136
+ async resolver(obj, options, { context }) {
133
137
  context.params = { ...context.params, ...options.input };
134
138
  context.params.role = context.params.id;
135
139
 
136
- await strapi.plugins['users-permissions'].controllers['users-permissions'].deleteRole(
137
- context
138
- );
140
+ await strapi
141
+ .plugin('users-permissions')
142
+ .controller('users-permissions')
143
+ .deleteRole(context);
139
144
 
140
145
  return { ok: true };
141
146
  },
142
147
  },
143
148
  createUser: {
144
149
  description: 'Create a new user',
145
- resolverOf: 'plugins::users-permissions.user.create',
146
- resolver: async (obj, options, { context }) => {
150
+ resolverOf: 'plugin::users-permissions.user.create',
151
+ async resolver(obj, options, { context }) {
147
152
  context.params = _.toPlainObject(options.input.where);
148
153
  context.request.body = _.toPlainObject(options.input.data);
149
154
 
150
- await strapi.plugins['users-permissions'].controllers.user.create(context);
155
+ await strapi
156
+ .plugin('users-permissions')
157
+ .controller('user')
158
+ .create(context);
151
159
 
152
160
  return {
153
- user: context.body.toJSON ? context.body.toJSON() : context.body,
161
+ user: context.body,
154
162
  };
155
163
  },
156
164
  },
157
165
  updateUser: {
158
166
  description: 'Update an existing user',
159
- resolverOf: 'plugins::users-permissions.user.update',
160
- resolver: async (obj, options, { context }) => {
167
+ resolverOf: 'plugin::users-permissions.user.update',
168
+ async resolver(obj, options, { context }) {
161
169
  context.params = _.toPlainObject(options.input.where);
162
170
  context.request.body = _.toPlainObject(options.input.data);
163
171
 
164
- await strapi.plugins['users-permissions'].controllers.user.update(context);
172
+ await strapi
173
+ .plugin('users-permissions')
174
+ .controller('user')
175
+ .update(context);
165
176
 
166
177
  return {
167
- user: context.body.toJSON ? context.body.toJSON() : context.body,
178
+ user: context.body,
168
179
  };
169
180
  },
170
181
  },
171
182
  deleteUser: {
172
183
  description: 'Delete an existing user',
173
- resolverOf: 'plugins::users-permissions.user.destroy',
174
- resolver: async (obj, options, { context }) => {
184
+ resolverOf: 'plugin::users-permissions.user.destroy',
185
+ async resolver(obj, options, { context }) {
175
186
  // Set parameters to context.
176
187
  context.params = _.toPlainObject(options.input.where);
177
188
  context.request.body = _.toPlainObject(options.input.data);
178
189
 
179
190
  // Retrieve user to be able to return it because
180
191
  // Bookshelf doesn't return the row once deleted.
181
- await strapi.plugins['users-permissions'].controllers.user.findOne(context);
192
+ await strapi
193
+ .plugin('users-permissions')
194
+ .controller('user')
195
+ .findOne(context);
182
196
  // Assign result to user.
183
- const user = context.body.toJSON ? context.body.toJSON() : context.body;
197
+ const user = context.body;
184
198
 
185
199
  // Run destroy query.
186
- await strapi.plugins['users-permissions'].controllers.user.destroy(context);
200
+ await strapi
201
+ .plugin('users-permissions')
202
+ .controller('user')
203
+ .destroy(context);
187
204
 
188
205
  return {
189
206
  user,
@@ -192,12 +209,16 @@ module.exports = {
192
209
  },
193
210
  register: {
194
211
  description: 'Register a user',
195
- resolverOf: 'plugins::users-permissions.auth.register',
196
- resolver: async (obj, options, { context }) => {
212
+ resolverOf: 'plugin::users-permissions.auth.register',
213
+ async resolver(obj, options, { context }) {
197
214
  context.request.body = _.toPlainObject(options.input);
198
215
 
199
- await strapi.plugins['users-permissions'].controllers.auth.register(context);
200
- let output = context.body.toJSON ? context.body.toJSON() : context.body;
216
+ await strapi
217
+ .plugin('users-permissions')
218
+ .controller('auth')
219
+ .register(context);
220
+
221
+ let output = context.body;
201
222
 
202
223
  checkBadRequest(output);
203
224
  return {
@@ -207,16 +228,20 @@ module.exports = {
207
228
  },
208
229
  },
209
230
  login: {
210
- resolverOf: 'plugins::users-permissions.auth.callback',
211
- resolver: async (obj, options, { context }) => {
231
+ resolverOf: 'plugin::users-permissions.auth.callback',
232
+ async resolver(obj, options, { context }) {
212
233
  context.params = {
213
234
  ...context.params,
214
235
  provider: options.input.provider,
215
236
  };
216
237
  context.request.body = _.toPlainObject(options.input);
217
238
 
218
- await strapi.plugins['users-permissions'].controllers.auth.callback(context);
219
- let output = context.body.toJSON ? context.body.toJSON() : context.body;
239
+ await strapi
240
+ .plugin('users-permissions')
241
+ .controller('auth')
242
+ .callback(context);
243
+
244
+ let output = context.body;
220
245
 
221
246
  checkBadRequest(output);
222
247
  return {
@@ -227,12 +252,16 @@ module.exports = {
227
252
  },
228
253
  forgotPassword: {
229
254
  description: 'Request a reset password token',
230
- resolverOf: 'plugins::users-permissions.auth.forgotPassword',
231
- resolver: async (obj, options, { context }) => {
255
+ resolverOf: 'plugin::users-permissions.auth.forgotPassword',
256
+ async resolver(obj, options, { context }) {
232
257
  context.request.body = _.toPlainObject(options);
233
258
 
234
- await strapi.plugins['users-permissions'].controllers.auth.forgotPassword(context);
235
- let output = context.body.toJSON ? context.body.toJSON() : context.body;
259
+ await strapi
260
+ .plugin('users-permissions')
261
+ .controller('auth')
262
+ .forgotPassword(context);
263
+
264
+ let output = context.body;
236
265
 
237
266
  checkBadRequest(output);
238
267
 
@@ -243,12 +272,16 @@ module.exports = {
243
272
  },
244
273
  resetPassword: {
245
274
  description: 'Reset user password. Confirm with a code (resetToken from forgotPassword)',
246
- resolverOf: 'plugins::users-permissions.auth.resetPassword',
247
- resolver: async (obj, options, { context }) => {
275
+ resolverOf: 'plugin::users-permissions.auth.resetPassword',
276
+ async resolver(obj, options, { context }) {
248
277
  context.request.body = _.toPlainObject(options);
249
278
 
250
- await strapi.plugins['users-permissions'].controllers.auth.resetPassword(context);
251
- let output = context.body.toJSON ? context.body.toJSON() : context.body;
279
+ await strapi
280
+ .plugin('users-permissions')
281
+ .controller('auth')
282
+ .resetPassword(context);
283
+
284
+ let output = context.body;
252
285
 
253
286
  checkBadRequest(output);
254
287
 
@@ -260,16 +293,16 @@ module.exports = {
260
293
  },
261
294
  emailConfirmation: {
262
295
  description: 'Confirm an email users email address',
263
- resolverOf: 'plugins::users-permissions.auth.emailConfirmation',
264
- resolver: async (obj, options, { context }) => {
296
+ resolverOf: 'plugin::users-permissions.auth.emailConfirmation',
297
+ async resolver(obj, options, { context }) {
265
298
  context.query = _.toPlainObject(options);
266
299
 
267
- await strapi.plugins['users-permissions'].controllers.auth.emailConfirmation(
268
- context,
269
- null,
270
- true
271
- );
272
- let output = context.body.toJSON ? context.body.toJSON() : context.body;
300
+ await strapi
301
+ .plugin('users-permissions')
302
+ .controller('auth')
303
+ .emailConfirmation(context, null, true);
304
+
305
+ let output = context.body;
273
306
 
274
307
  checkBadRequest(output);
275
308
 
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ const jwt = require('./jwt');
4
+ const providers = require('./providers');
5
+ const user = require('./user');
6
+ const role = require('./role');
7
+ const usersPermissions = require('./users-permissions');
8
+
9
+ module.exports = {
10
+ jwt,
11
+ providers,
12
+ role,
13
+ user,
14
+ 'users-permissions': usersPermissions,
15
+ };
@@ -9,7 +9,7 @@
9
9
  const _ = require('lodash');
10
10
  const jwt = require('jsonwebtoken');
11
11
 
12
- module.exports = {
12
+ module.exports = ({ strapi }) => ({
13
13
  getToken(ctx) {
14
14
  const params = _.assign({}, ctx.request.body, ctx.request.query);
15
15
 
@@ -39,27 +39,25 @@ module.exports = {
39
39
  },
40
40
 
41
41
  issue(payload, jwtOptions = {}) {
42
- _.defaults(jwtOptions, strapi.plugins['users-permissions'].config.jwt);
42
+ _.defaults(jwtOptions, strapi.config.get('plugin.users-permissions.jwt'));
43
43
  return jwt.sign(
44
44
  _.clone(payload.toJSON ? payload.toJSON() : payload),
45
- _.get(strapi.plugins, ['users-permissions', 'config', 'jwtSecret']),
45
+ strapi.config.get('plugin.users-permissions.jwtSecret'),
46
46
  jwtOptions
47
47
  );
48
48
  },
49
49
 
50
50
  verify(token) {
51
51
  return new Promise(function(resolve, reject) {
52
- jwt.verify(
53
- token,
54
- _.get(strapi.plugins, ['users-permissions', 'config', 'jwtSecret']),
55
- {},
56
- function(err, tokenPayload = {}) {
57
- if (err) {
58
- return reject(new Error('Invalid token.'));
59
- }
60
- resolve(tokenPayload);
52
+ jwt.verify(token, strapi.config.get('plugin.users-permissions.jwtSecret'), {}, function(
53
+ err,
54
+ tokenPayload = {}
55
+ ) {
56
+ if (err) {
57
+ return reject(new Error('Invalid token.'));
61
58
  }
62
- );
59
+ resolve(tokenPayload);
60
+ });
63
61
  });
64
62
  },
65
- };
63
+ });