@strapi/plugin-users-permissions 4.20.5 → 5.0.0-alpha.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 (108) hide show
  1. package/admin/src/components/FormModal/index.jsx +1 -2
  2. package/admin/src/components/Permissions/reducer.js +1 -1
  3. package/admin/src/components/UsersPermissions/reducer.js +1 -1
  4. package/admin/src/index.js +14 -30
  5. package/admin/src/pages/AdvancedSettings/index.jsx +69 -107
  6. package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
  7. package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
  8. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +47 -74
  9. package/admin/src/pages/EmailTemplates/index.jsx +22 -50
  10. package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
  11. package/admin/src/pages/Providers/index.jsx +91 -96
  12. package/admin/src/pages/Providers/utils/forms.js +11 -11
  13. package/admin/src/pages/Roles/constants.js +3 -3
  14. package/admin/src/pages/Roles/hooks/usePlugins.js +5 -4
  15. package/admin/src/pages/Roles/index.jsx +9 -18
  16. package/admin/src/pages/Roles/pages/CreatePage.jsx +21 -28
  17. package/admin/src/pages/Roles/pages/EditPage.jsx +23 -40
  18. package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +23 -27
  19. package/admin/src/pages/Roles/pages/ListPage/index.jsx +42 -38
  20. package/admin/src/pages/Roles/pages/ListPage/utils/api.js +6 -6
  21. package/admin/src/translations/en.json +1 -1
  22. package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs +84370 -0
  23. package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs.map +1 -0
  24. package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js +84398 -0
  25. package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js.map +1 -0
  26. package/dist/_chunks/Helmet-d9JljxUo.js +1010 -0
  27. package/dist/_chunks/Helmet-d9JljxUo.js.map +1 -0
  28. package/dist/_chunks/Helmet-kyJ1Zklj.mjs +1008 -0
  29. package/dist/_chunks/Helmet-kyJ1Zklj.mjs.map +1 -0
  30. package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js +1618 -0
  31. package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js.map +1 -0
  32. package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs +1595 -0
  33. package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs.map +1 -0
  34. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs +33 -0
  35. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs.map +1 -0
  36. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js +33 -0
  37. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js.map +1 -0
  38. package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs +190 -0
  39. package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs.map +1 -0
  40. package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js +209 -0
  41. package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js.map +1 -0
  42. package/dist/_chunks/{en-m608rMZx.js → en-TaNIVnDO.js} +2 -2
  43. package/dist/_chunks/en-TaNIVnDO.js.map +1 -0
  44. package/dist/_chunks/{en-CE3wEy_c.mjs → en-jvJ-d-Qq.mjs} +2 -2
  45. package/dist/_chunks/en-jvJ-d-Qq.mjs.map +1 -0
  46. package/dist/_chunks/{index-iNtwnT3f.mjs → index-53jX2hhF.mjs} +26 -34
  47. package/dist/_chunks/index-53jX2hhF.mjs.map +1 -0
  48. package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs +16421 -0
  49. package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs.map +1 -0
  50. package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js +16446 -0
  51. package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js.map +1 -0
  52. package/dist/_chunks/{index-rryiT0-Z.mjs → index-A3oJlPcE.mjs} +111 -108
  53. package/dist/_chunks/index-A3oJlPcE.mjs.map +1 -0
  54. package/dist/_chunks/{index-XqdaO5WZ.js → index-MEUac_4V.js} +124 -122
  55. package/dist/_chunks/index-MEUac_4V.js.map +1 -0
  56. package/dist/_chunks/index-N-GcFWtg.mjs +261 -0
  57. package/dist/_chunks/index-N-GcFWtg.mjs.map +1 -0
  58. package/dist/_chunks/{index-O9AAUvyy.js → index-TJUxOCtJ.js} +26 -34
  59. package/dist/_chunks/index-TJUxOCtJ.js.map +1 -0
  60. package/dist/_chunks/{index-6Kdo3KXv.js → index-VgvlwVA7.js} +106 -147
  61. package/dist/_chunks/index-VgvlwVA7.js.map +1 -0
  62. package/dist/_chunks/{index-1uupZmu0.js → index-bRuKnVcH.js} +39 -32
  63. package/dist/_chunks/index-bRuKnVcH.js.map +1 -0
  64. package/dist/_chunks/{index-ethhTEkj.mjs → index-ee_14Ldw.mjs} +36 -29
  65. package/dist/_chunks/index-ee_14Ldw.mjs.map +1 -0
  66. package/dist/_chunks/index-mzJ2Vb5u.js +280 -0
  67. package/dist/_chunks/index-mzJ2Vb5u.js.map +1 -0
  68. package/dist/_chunks/{index-a9oKDd3C.mjs → index-vXywiVeM.mjs} +101 -142
  69. package/dist/_chunks/index-vXywiVeM.mjs.map +1 -0
  70. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs +39 -0
  71. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs.map +1 -0
  72. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js +57 -0
  73. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js.map +1 -0
  74. package/dist/admin/index.js +1 -1
  75. package/dist/admin/index.mjs +1 -1
  76. package/dist/style.css +84 -0
  77. package/package.json +13 -13
  78. package/server/bootstrap/grant-config.js +9 -0
  79. package/server/bootstrap/index.js +2 -39
  80. package/server/content-types/user/index.js +0 -1
  81. package/server/controllers/auth.js +24 -53
  82. package/server/controllers/content-manager-user.js +24 -28
  83. package/server/controllers/role.js +1 -1
  84. package/server/controllers/user.js +5 -5
  85. package/server/middlewares/rateLimit.js +1 -1
  86. package/server/register.js +1 -1
  87. package/server/services/jwt.js +3 -3
  88. package/server/services/permission.js +3 -7
  89. package/server/services/providers-registry.js +15 -0
  90. package/server/services/providers.js +10 -5
  91. package/server/services/role.js +15 -13
  92. package/server/services/user.js +28 -14
  93. package/server/services/users-permissions.js +12 -10
  94. package/server/utils/sanitize/sanitizers.js +2 -2
  95. package/dist/_chunks/en-CE3wEy_c.mjs.map +0 -1
  96. package/dist/_chunks/en-m608rMZx.js.map +0 -1
  97. package/dist/_chunks/index-1uupZmu0.js.map +0 -1
  98. package/dist/_chunks/index-6Kdo3KXv.js.map +0 -1
  99. package/dist/_chunks/index-O9AAUvyy.js.map +0 -1
  100. package/dist/_chunks/index-Un-J-cxQ.js +0 -320
  101. package/dist/_chunks/index-Un-J-cxQ.js.map +0 -1
  102. package/dist/_chunks/index-X0yw_GgN.mjs +0 -301
  103. package/dist/_chunks/index-X0yw_GgN.mjs.map +0 -1
  104. package/dist/_chunks/index-XqdaO5WZ.js.map +0 -1
  105. package/dist/_chunks/index-a9oKDd3C.mjs.map +0 -1
  106. package/dist/_chunks/index-ethhTEkj.mjs.map +0 -1
  107. package/dist/_chunks/index-iNtwnT3f.mjs.map +0 -1
  108. package/dist/_chunks/index-rryiT0-Z.mjs.map +0 -1
@@ -17,24 +17,23 @@ const ACTIONS = {
17
17
  };
18
18
 
19
19
  const findEntityAndCheckPermissions = async (ability, action, model, id) => {
20
- const entity = await strapi.query(userModel).findOne({
21
- where: { id },
20
+ const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {
22
21
  populate: [`${CREATED_BY_ATTRIBUTE}.roles`],
23
22
  });
24
23
 
25
- if (_.isNil(entity)) {
24
+ if (_.isNil(doc)) {
26
25
  throw new NotFoundError();
27
26
  }
28
27
 
29
28
  const pm = strapi.admin.services.permission.createPermissionsManager({ ability, action, model });
30
29
 
31
- if (pm.ability.cannot(pm.action, pm.toSubject(entity))) {
30
+ if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {
32
31
  throw new ForbiddenError();
33
32
  }
34
33
 
35
- const entityWithoutCreatorRoles = _.omit(entity, `${CREATED_BY_ATTRIBUTE}.roles`);
34
+ const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);
36
35
 
37
- return { pm, entity: entityWithoutCreatorRoles };
36
+ return { pm, doc: docWithoutCreatorRoles };
38
37
  };
39
38
 
40
39
  module.exports = {
@@ -66,7 +65,7 @@ module.exports = {
66
65
 
67
66
  await validateCreateUserBody(ctx.request.body);
68
67
 
69
- const userWithSameUsername = await strapi
68
+ const userWithSameUsername = await strapi.db
70
69
  .query('plugin::users-permissions.user')
71
70
  .findOne({ where: { username } });
72
71
 
@@ -75,7 +74,7 @@ module.exports = {
75
74
  }
76
75
 
77
76
  if (advanced.unique_email) {
78
- const userWithSameEmail = await strapi
77
+ const userWithSameEmail = await strapi.db
79
78
  .query('plugin::users-permissions.user')
80
79
  .findOne({ where: { email: email.toLowerCase() } });
81
80
 
@@ -93,18 +92,11 @@ module.exports = {
93
92
 
94
93
  user.email = _.toLower(user.email);
95
94
 
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
95
  try {
105
96
  const data = await strapi
106
- .service('plugin::content-manager.entity-manager')
107
- .create(user, userModel);
97
+ .service('plugin::content-manager.document-manager')
98
+ .create(userModel, { data: user });
99
+
108
100
  const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });
109
101
 
110
102
  ctx.created(sanitizedData);
@@ -118,7 +110,7 @@ module.exports = {
118
110
  */
119
111
 
120
112
  async update(ctx) {
121
- const { id } = ctx.params;
113
+ const { id: documentId } = ctx.params;
122
114
  const { body } = ctx.request;
123
115
  const { user: admin, userAbility } = ctx.state;
124
116
 
@@ -128,13 +120,14 @@ module.exports = {
128
120
 
129
121
  const { email, username, password } = body;
130
122
 
131
- const { pm, entity } = await findEntityAndCheckPermissions(
123
+ const { pm, doc } = await findEntityAndCheckPermissions(
132
124
  userAbility,
133
125
  ACTIONS.edit,
134
126
  userModel,
135
- id
127
+ documentId
136
128
  );
137
- const user = entity;
129
+
130
+ const user = doc;
138
131
 
139
132
  await validateUpdateUserBody(ctx.request.body);
140
133
 
@@ -143,23 +136,24 @@ module.exports = {
143
136
  }
144
137
 
145
138
  if (_.has(body, 'username')) {
146
- const userWithSameUsername = await strapi
139
+ const userWithSameUsername = await strapi.db
147
140
  .query('plugin::users-permissions.user')
148
141
  .findOne({ where: { username } });
149
142
 
150
- if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(id)) {
143
+ if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {
151
144
  throw new ApplicationError('Username already taken');
152
145
  }
153
146
  }
154
147
 
155
148
  if (_.has(body, 'email') && advancedConfigs.unique_email) {
156
- const userWithSameEmail = await strapi
149
+ const userWithSameEmail = await strapi.db
157
150
  .query('plugin::users-permissions.user')
158
151
  .findOne({ where: { email: _.toLower(email) } });
159
152
 
160
- if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(id)) {
153
+ if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {
161
154
  throw new ApplicationError('Email already taken');
162
155
  }
156
+
163
157
  body.email = _.toLower(body.email);
164
158
  }
165
159
 
@@ -167,8 +161,10 @@ module.exports = {
167
161
  const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');
168
162
 
169
163
  const data = await strapi
170
- .service('plugin::content-manager.entity-manager')
171
- .update({ id }, updateData, userModel);
164
+ .service('plugin::content-manager.document-manager')
165
+ .update(documentId, userModel, {
166
+ data: updateData,
167
+ });
172
168
 
173
169
  ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });
174
170
  },
@@ -59,7 +59,7 @@ module.exports = {
59
59
  }
60
60
 
61
61
  // Fetch public role.
62
- const publicRole = await strapi
62
+ const publicRole = await strapi.db
63
63
  .query('plugin::users-permissions.role')
64
64
  .findOne({ where: { type: 'public' } });
65
65
 
@@ -49,7 +49,7 @@ module.exports = {
49
49
 
50
50
  const { email, username, role } = ctx.request.body;
51
51
 
52
- const userWithSameUsername = await strapi
52
+ const userWithSameUsername = await strapi.db
53
53
  .query('plugin::users-permissions.user')
54
54
  .findOne({ where: { username } });
55
55
 
@@ -58,7 +58,7 @@ module.exports = {
58
58
  }
59
59
 
60
60
  if (advanced.unique_email) {
61
- const userWithSameEmail = await strapi
61
+ const userWithSameEmail = await strapi.db
62
62
  .query('plugin::users-permissions.user')
63
63
  .findOne({ where: { email: email.toLowerCase() } });
64
64
 
@@ -74,7 +74,7 @@ module.exports = {
74
74
  };
75
75
 
76
76
  if (!role) {
77
- const defaultRole = await strapi
77
+ const defaultRole = await strapi.db
78
78
  .query('plugin::users-permissions.role')
79
79
  .findOne({ where: { type: advanced.default_role } });
80
80
 
@@ -115,7 +115,7 @@ module.exports = {
115
115
  }
116
116
 
117
117
  if (_.has(ctx.request.body, 'username')) {
118
- const userWithSameUsername = await strapi
118
+ const userWithSameUsername = await strapi.db
119
119
  .query('plugin::users-permissions.user')
120
120
  .findOne({ where: { username } });
121
121
 
@@ -125,7 +125,7 @@ module.exports = {
125
125
  }
126
126
 
127
127
  if (_.has(ctx.request.body, 'email') && advancedConfigs.unique_email) {
128
- const userWithSameEmail = await strapi
128
+ const userWithSameEmail = await strapi.db
129
129
  .query('plugin::users-permissions.user')
130
130
  .findOne({ where: { email: email.toLowerCase() } });
131
131
 
@@ -9,7 +9,7 @@ const { RateLimitError } = utils.errors;
9
9
  module.exports =
10
10
  (config, { strapi }) =>
11
11
  async (ctx, next) => {
12
- let rateLimitConfig = strapi.config.get('plugin.users-permissions.ratelimit');
12
+ let rateLimitConfig = strapi.config.get('plugin::users-permissions.ratelimit');
13
13
 
14
14
  if (!rateLimitConfig) {
15
15
  rateLimitConfig = {
@@ -7,7 +7,7 @@ const authStrategy = require('./strategies/users-permissions');
7
7
  const sanitizers = require('./utils/sanitize/sanitizers');
8
8
 
9
9
  module.exports = ({ strapi }) => {
10
- strapi.container.get('auth').register('content-api', authStrategy);
10
+ strapi.get('auth').register('content-api', authStrategy);
11
11
  strapi.sanitizers.add('content-api.output', sanitizers.defaultSanitizeOutput);
12
12
 
13
13
  if (strapi.plugin('graphql')) {
@@ -29,10 +29,10 @@ module.exports = ({ strapi }) => ({
29
29
  },
30
30
 
31
31
  issue(payload, jwtOptions = {}) {
32
- _.defaults(jwtOptions, strapi.config.get('plugin.users-permissions.jwt'));
32
+ _.defaults(jwtOptions, strapi.config.get('plugin::users-permissions.jwt'));
33
33
  return jwt.sign(
34
34
  _.clone(payload.toJSON ? payload.toJSON() : payload),
35
- strapi.config.get('plugin.users-permissions.jwtSecret'),
35
+ strapi.config.get('plugin::users-permissions.jwtSecret'),
36
36
  jwtOptions
37
37
  );
38
38
  },
@@ -41,7 +41,7 @@ module.exports = ({ strapi }) => ({
41
41
  return new Promise((resolve, reject) => {
42
42
  jwt.verify(
43
43
  token,
44
- strapi.config.get('plugin.users-permissions.jwtSecret'),
44
+ strapi.config.get('plugin::users-permissions.jwtSecret'),
45
45
  {},
46
46
  (err, tokenPayload = {}) => {
47
47
  if (err) {
@@ -11,11 +11,7 @@ module.exports = ({ strapi }) => ({
11
11
  * @return {object[]}
12
12
  */
13
13
  async findRolePermissions(roleID) {
14
- return strapi.entityService.load(
15
- 'plugin::users-permissions.role',
16
- { id: roleID },
17
- 'permissions'
18
- );
14
+ return strapi.db.query('plugin::users-permissions.role').load({ id: roleID }, 'permissions');
19
15
  },
20
16
 
21
17
  /**
@@ -24,8 +20,8 @@ module.exports = ({ strapi }) => ({
24
20
  * @return {object[]}
25
21
  */
26
22
  async findPublicPermissions() {
27
- return strapi.entityService.findMany('plugin::users-permissions.permission', {
28
- filters: PUBLIC_ROLE_FILTER,
23
+ return strapi.db.query('plugin::users-permissions.permission').findMany({
24
+ where: PUBLIC_ROLE_FILTER,
29
25
  });
30
26
  },
31
27
 
@@ -331,6 +331,21 @@ const getInitialProviders = ({ purest }) => ({
331
331
  };
332
332
  });
333
333
  },
334
+ async keycloak({ accessToken, providers }) {
335
+ const keycloak = purest({ provider: 'keycloak' });
336
+
337
+ return keycloak
338
+ .subdomain(providers.keycloak.subdomain)
339
+ .get('protocol/openid-connect/userinfo')
340
+ .auth(accessToken)
341
+ .request()
342
+ .then(({ body }) => {
343
+ return {
344
+ username: body.preferred_username,
345
+ email: body.email,
346
+ };
347
+ });
348
+ },
334
349
  });
335
350
 
336
351
  module.exports = () => {
@@ -8,7 +8,6 @@
8
8
  const _ = require('lodash');
9
9
  const urlJoin = require('url-join');
10
10
 
11
- const { getAbsoluteServerUrl } = require('@strapi/utils');
12
11
  const { getService } = require('../utils');
13
12
 
14
13
  module.exports = ({ strapi }) => {
@@ -60,7 +59,7 @@ module.exports = ({ strapi }) => {
60
59
  throw new Error('Email was not available.');
61
60
  }
62
61
 
63
- const users = await strapi.query('plugin::users-permissions.user').findMany({
62
+ const users = await strapi.db.query('plugin::users-permissions.user').findMany({
64
63
  where: { email },
65
64
  });
66
65
 
@@ -83,7 +82,7 @@ module.exports = ({ strapi }) => {
83
82
  }
84
83
 
85
84
  // Retrieve default role.
86
- const defaultRole = await strapi
85
+ const defaultRole = await strapi.db
87
86
  .query('plugin::users-permissions.role')
88
87
  .findOne({ where: { type: advancedSettings.default_role } });
89
88
 
@@ -96,7 +95,7 @@ module.exports = ({ strapi }) => {
96
95
  confirmed: true,
97
96
  };
98
97
 
99
- const createdUser = await strapi
98
+ const createdUser = await strapi.db
100
99
  .query('plugin::users-permissions.user')
101
100
  .create({ data: newUser });
102
101
 
@@ -105,7 +104,13 @@ module.exports = ({ strapi }) => {
105
104
 
106
105
  const buildRedirectUri = (provider = '') => {
107
106
  const apiPrefix = strapi.config.get('api.rest.prefix');
108
- return urlJoin(getAbsoluteServerUrl(strapi.config), apiPrefix, 'connect', provider, 'callback');
107
+ return urlJoin(
108
+ strapi.config.get('server.absoluteUrl'),
109
+ apiPrefix,
110
+ 'connect',
111
+ provider,
112
+ 'callback'
113
+ );
109
114
  };
110
115
 
111
116
  return {
@@ -10,7 +10,7 @@ module.exports = ({ strapi }) => ({
10
10
  params.type = _.snakeCase(_.deburr(_.toLower(params.name)));
11
11
  }
12
12
 
13
- const role = await strapi
13
+ const role = await strapi.db
14
14
  .query('plugin::users-permissions.role')
15
15
  .create({ data: _.omit(params, ['users', 'permissions']) });
16
16
 
@@ -25,7 +25,7 @@ module.exports = ({ strapi }) => ({
25
25
  const actionID = `${typeName}.${controllerName}.${actionName}`;
26
26
 
27
27
  acc.push(
28
- strapi
28
+ strapi.db
29
29
  .query('plugin::users-permissions.permission')
30
30
  .create({ data: { action: actionID, role: role.id } })
31
31
  );
@@ -42,7 +42,7 @@ module.exports = ({ strapi }) => ({
42
42
  },
43
43
 
44
44
  async findOne(roleID) {
45
- const role = await strapi
45
+ const role = await strapi.db
46
46
  .query('plugin::users-permissions.role')
47
47
  .findOne({ where: { id: roleID }, populate: ['permissions'] });
48
48
 
@@ -69,10 +69,12 @@ module.exports = ({ strapi }) => ({
69
69
  },
70
70
 
71
71
  async find() {
72
- const roles = await strapi.query('plugin::users-permissions.role').findMany({ sort: ['name'] });
72
+ const roles = await strapi.db
73
+ .query('plugin::users-permissions.role')
74
+ .findMany({ sort: ['name'] });
73
75
 
74
76
  for (const role of roles) {
75
- role.nb_users = await strapi
77
+ role.nb_users = await strapi.db
76
78
  .query('plugin::users-permissions.user')
77
79
  .count({ where: { role: { id: role.id } } });
78
80
  }
@@ -81,7 +83,7 @@ module.exports = ({ strapi }) => ({
81
83
  },
82
84
 
83
85
  async updateRole(roleID, data) {
84
- const role = await strapi
86
+ const role = await strapi.db
85
87
  .query('plugin::users-permissions.role')
86
88
  .findOne({ where: { id: roleID }, populate: ['permissions'] });
87
89
 
@@ -89,7 +91,7 @@ module.exports = ({ strapi }) => ({
89
91
  throw new NotFoundError('Role not found');
90
92
  }
91
93
 
92
- await strapi.query('plugin::users-permissions.role').update({
94
+ await strapi.db.query('plugin::users-permissions.role').update({
93
95
  where: { id: roleID },
94
96
  data: _.pick(data, ['name', 'description']),
95
97
  });
@@ -129,7 +131,7 @@ module.exports = ({ strapi }) => ({
129
131
 
130
132
  await Promise.all(
131
133
  toDelete.map((permission) =>
132
- strapi
134
+ strapi.db
133
135
  .query('plugin::users-permissions.permission')
134
136
  .delete({ where: { id: permission.id } })
135
137
  )
@@ -137,13 +139,13 @@ module.exports = ({ strapi }) => ({
137
139
 
138
140
  await Promise.all(
139
141
  toCreate.map((permissionInfo) =>
140
- strapi.query('plugin::users-permissions.permission').create({ data: permissionInfo })
142
+ strapi.db.query('plugin::users-permissions.permission').create({ data: permissionInfo })
141
143
  )
142
144
  );
143
145
  },
144
146
 
145
147
  async deleteRole(roleID, publicRoleID) {
146
- const role = await strapi
148
+ const role = await strapi.db
147
149
  .query('plugin::users-permissions.role')
148
150
  .findOne({ where: { id: roleID }, populate: ['users', 'permissions'] });
149
151
 
@@ -154,7 +156,7 @@ module.exports = ({ strapi }) => ({
154
156
  // Move users to guest role.
155
157
  await Promise.all(
156
158
  role.users.map((user) => {
157
- return strapi.query('plugin::users-permissions.user').update({
159
+ return strapi.db.query('plugin::users-permissions.user').update({
158
160
  where: { id: user.id },
159
161
  data: { role: publicRoleID },
160
162
  });
@@ -165,13 +167,13 @@ module.exports = ({ strapi }) => ({
165
167
  // TODO: use delete many
166
168
  await Promise.all(
167
169
  role.permissions.map((permission) => {
168
- return strapi.query('plugin::users-permissions.permission').delete({
170
+ return strapi.db.query('plugin::users-permissions.permission').delete({
169
171
  where: { id: permission.id },
170
172
  });
171
173
  })
172
174
  );
173
175
 
174
176
  // Delete the role.
175
- await strapi.query('plugin::users-permissions.role').delete({ where: { id: roleID } });
177
+ await strapi.db.query('plugin::users-permissions.role').delete({ where: { id: roleID } });
176
178
  },
177
179
  });
@@ -10,9 +10,11 @@ const crypto = require('crypto');
10
10
  const bcrypt = require('bcryptjs');
11
11
  const urlJoin = require('url-join');
12
12
 
13
- const { getAbsoluteAdminUrl, getAbsoluteServerUrl, sanitize } = require('@strapi/utils');
13
+ const { sanitize, convertQueryParams } = require('@strapi/utils');
14
14
  const { getService } = require('../utils');
15
15
 
16
+ const USER_MODEL_UID = 'plugin::users-permissions.user';
17
+
16
18
  module.exports = ({ strapi }) => ({
17
19
  /**
18
20
  * Promise to count users
@@ -21,7 +23,7 @@ module.exports = ({ strapi }) => ({
21
23
  */
22
24
 
23
25
  count(params) {
24
- return strapi.query('plugin::users-permissions.user').count({ where: params });
26
+ return strapi.db.query(USER_MODEL_UID).count({ where: params });
25
27
  },
26
28
 
27
29
  /**
@@ -35,7 +37,7 @@ module.exports = ({ strapi }) => ({
35
37
  * @return {Promise}
36
38
  */
37
39
  async add(values) {
38
- return strapi.entityService.create('plugin::users-permissions.user', {
40
+ return strapi.db.query(USER_MODEL_UID).create({
39
41
  data: values,
40
42
  populate: ['role'],
41
43
  });
@@ -48,7 +50,8 @@ module.exports = ({ strapi }) => ({
48
50
  * @return {Promise}
49
51
  */
50
52
  async edit(userId, params = {}) {
51
- return strapi.entityService.update('plugin::users-permissions.user', userId, {
53
+ return strapi.db.query(USER_MODEL_UID).update({
54
+ where: { id: userId },
52
55
  data: params,
53
56
  populate: ['role'],
54
57
  });
@@ -59,7 +62,14 @@ module.exports = ({ strapi }) => ({
59
62
  * @return {Promise}
60
63
  */
61
64
  fetch(id, params) {
62
- return strapi.entityService.findOne('plugin::users-permissions.user', id, params);
65
+ const query = convertQueryParams.transformParamsToQuery(USER_MODEL_UID, params ?? {});
66
+
67
+ return strapi.db.query(USER_MODEL_UID).findOne({
68
+ ...query,
69
+ where: {
70
+ $and: [{ id }, query.where || {}],
71
+ },
72
+ });
63
73
  },
64
74
 
65
75
  /**
@@ -67,9 +77,7 @@ module.exports = ({ strapi }) => ({
67
77
  * @return {Promise}
68
78
  */
69
79
  fetchAuthenticatedUser(id) {
70
- return strapi
71
- .query('plugin::users-permissions.user')
72
- .findOne({ where: { id }, populate: ['role'] });
80
+ return strapi.db.query(USER_MODEL_UID).findOne({ where: { id }, populate: ['role'] });
73
81
  },
74
82
 
75
83
  /**
@@ -77,7 +85,9 @@ module.exports = ({ strapi }) => ({
77
85
  * @return {Promise}
78
86
  */
79
87
  fetchAll(params) {
80
- return strapi.entityService.findMany('plugin::users-permissions.user', params);
88
+ const query = convertQueryParams.transformParamsToQuery(USER_MODEL_UID, params ?? {});
89
+
90
+ return strapi.db.query(USER_MODEL_UID).findMany(query);
81
91
  },
82
92
 
83
93
  /**
@@ -85,7 +95,7 @@ module.exports = ({ strapi }) => ({
85
95
  * @return {Promise}
86
96
  */
87
97
  async remove(params) {
88
- return strapi.query('plugin::users-permissions.user').delete({ where: params });
98
+ return strapi.db.query(USER_MODEL_UID).delete({ where: params });
89
99
  },
90
100
 
91
101
  validatePassword(password, hash) {
@@ -95,7 +105,7 @@ module.exports = ({ strapi }) => ({
95
105
  async sendConfirmationEmail(user) {
96
106
  const userPermissionService = getService('users-permissions');
97
107
  const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });
98
- const userSchema = strapi.getModel('plugin::users-permissions.user');
108
+ const userSchema = strapi.getModel(USER_MODEL_UID);
99
109
 
100
110
  const settings = await pluginStore
101
111
  .get({ key: 'email' })
@@ -112,9 +122,13 @@ module.exports = ({ strapi }) => ({
112
122
 
113
123
  try {
114
124
  settings.message = await userPermissionService.template(settings.message, {
115
- URL: urlJoin(getAbsoluteServerUrl(strapi.config), apiPrefix, '/auth/email-confirmation'),
116
- SERVER_URL: getAbsoluteServerUrl(strapi.config),
117
- ADMIN_URL: getAbsoluteAdminUrl(strapi.config),
125
+ URL: urlJoin(
126
+ strapi.config.get('server.absoluteUrl'),
127
+ apiPrefix,
128
+ '/auth/email-confirmation'
129
+ ),
130
+ SERVER_URL: strapi.config.get('server.absoluteUrl'),
131
+ ADMIN_URL: strapi.config.get('admin.absoluteUrl'),
118
132
  USER: sanitizedUserInfo,
119
133
  CODE: confirmationToken,
120
134
  });
@@ -6,7 +6,7 @@ const urlJoin = require('url-join');
6
6
  const {
7
7
  template: { createStrictInterpolationRegExp },
8
8
  errors,
9
- keysDeep,
9
+ objects,
10
10
  } = require('@strapi/utils');
11
11
 
12
12
  const { getService } = require('../utils');
@@ -151,8 +151,8 @@ module.exports = ({ strapi }) => ({
151
151
  },
152
152
 
153
153
  async syncPermissions() {
154
- const roles = await strapi.query('plugin::users-permissions.role').findMany();
155
- const dbPermissions = await strapi.query('plugin::users-permissions.permission').findMany();
154
+ const roles = await strapi.db.query('plugin::users-permissions.role').findMany();
155
+ const dbPermissions = await strapi.db.query('plugin::users-permissions.permission').findMany();
156
156
 
157
157
  const permissionsFoundInDB = _.uniq(_.map(dbPermissions, 'action'));
158
158
 
@@ -178,7 +178,9 @@ module.exports = ({ strapi }) => ({
178
178
 
179
179
  await Promise.all(
180
180
  toDelete.map((action) => {
181
- return strapi.query('plugin::users-permissions.permission').delete({ where: { action } });
181
+ return strapi.db
182
+ .query('plugin::users-permissions.permission')
183
+ .delete({ where: { action } });
182
184
  })
183
185
  );
184
186
 
@@ -192,7 +194,7 @@ module.exports = ({ strapi }) => ({
192
194
 
193
195
  await Promise.all(
194
196
  toCreate.map((action) => {
195
- return strapi.query('plugin::users-permissions.permission').create({
197
+ return strapi.db.query('plugin::users-permissions.permission').create({
196
198
  data: {
197
199
  action,
198
200
  role: role.id,
@@ -205,10 +207,10 @@ module.exports = ({ strapi }) => ({
205
207
  },
206
208
 
207
209
  async initialize() {
208
- const roleCount = await strapi.query('plugin::users-permissions.role').count();
210
+ const roleCount = await strapi.db.query('plugin::users-permissions.role').count();
209
211
 
210
212
  if (roleCount === 0) {
211
- await strapi.query('plugin::users-permissions.role').create({
213
+ await strapi.db.query('plugin::users-permissions.role').create({
212
214
  data: {
213
215
  name: 'Authenticated',
214
216
  description: 'Default role given to authenticated user.',
@@ -216,7 +218,7 @@ module.exports = ({ strapi }) => ({
216
218
  },
217
219
  });
218
220
 
219
- await strapi.query('plugin::users-permissions.role').create({
221
+ await strapi.db.query('plugin::users-permissions.role').create({
220
222
  data: {
221
223
  name: 'Public',
222
224
  description: 'Default role given to unauthenticated user.',
@@ -229,13 +231,13 @@ module.exports = ({ strapi }) => ({
229
231
  },
230
232
 
231
233
  async updateUserRole(user, role) {
232
- return strapi
234
+ return strapi.db
233
235
  .query('plugin::users-permissions.user')
234
236
  .update({ where: { id: user.id }, data: { role } });
235
237
  },
236
238
 
237
239
  template(layout, data) {
238
- const allowedTemplateVariables = keysDeep(data);
240
+ const allowedTemplateVariables = objects.keysDeep(data);
239
241
 
240
242
  // Create a strict interpolation RegExp based on possible variable names
241
243
  const interpolate = createStrictInterpolationRegExp(allowedTemplateVariables, 'g');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const { curry } = require('lodash/fp');
4
- const { traverseEntity, pipeAsync } = require('@strapi/utils');
4
+ const { traverseEntity, async } = require('@strapi/utils');
5
5
 
6
6
  const { removeUserRelationFromRoleEntities } = require('./visitors');
7
7
 
@@ -10,7 +10,7 @@ const sanitizeUserRelationFromRoleEntities = curry((schema, entity) => {
10
10
  });
11
11
 
12
12
  const defaultSanitizeOutput = curry((schema, entity) => {
13
- return pipeAsync(sanitizeUserRelationFromRoleEntities(schema))(entity);
13
+ return async.pipe(sanitizeUserRelationFromRoleEntities(schema))(entity);
14
14
  });
15
15
 
16
16
  module.exports = {
@@ -1 +0,0 @@
1
- {"version":3,"file":"en-CE3wEy_c.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"en-m608rMZx.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}