@strapi/plugin-users-permissions 4.20.4 → 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.
- package/admin/src/components/FormModal/index.jsx +1 -2
- package/admin/src/components/Permissions/reducer.js +1 -1
- package/admin/src/components/UsersPermissions/reducer.js +1 -1
- package/admin/src/index.js +14 -30
- package/admin/src/pages/AdvancedSettings/index.jsx +69 -107
- package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
- package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
- package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +47 -74
- package/admin/src/pages/EmailTemplates/index.jsx +22 -50
- package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
- package/admin/src/pages/Providers/index.jsx +91 -96
- package/admin/src/pages/Providers/utils/forms.js +11 -11
- package/admin/src/pages/Roles/constants.js +3 -3
- package/admin/src/pages/Roles/hooks/usePlugins.js +5 -4
- package/admin/src/pages/Roles/index.jsx +9 -18
- package/admin/src/pages/Roles/pages/CreatePage.jsx +21 -28
- package/admin/src/pages/Roles/pages/EditPage.jsx +23 -40
- package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +23 -27
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +42 -38
- package/admin/src/pages/Roles/pages/ListPage/utils/api.js +6 -6
- package/admin/src/translations/en.json +1 -1
- package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs +84370 -0
- package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs.map +1 -0
- package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js +84398 -0
- package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js.map +1 -0
- package/dist/_chunks/Helmet-d9JljxUo.js +1010 -0
- package/dist/_chunks/Helmet-d9JljxUo.js.map +1 -0
- package/dist/_chunks/Helmet-kyJ1Zklj.mjs +1008 -0
- package/dist/_chunks/Helmet-kyJ1Zklj.mjs.map +1 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js +1618 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js.map +1 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs +1595 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs.map +1 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs +33 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs.map +1 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js +33 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js.map +1 -0
- package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs +190 -0
- package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs.map +1 -0
- package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js +209 -0
- package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js.map +1 -0
- package/dist/_chunks/{en-m608rMZx.js → en-TaNIVnDO.js} +2 -2
- package/dist/_chunks/en-TaNIVnDO.js.map +1 -0
- package/dist/_chunks/{en-CE3wEy_c.mjs → en-jvJ-d-Qq.mjs} +2 -2
- package/dist/_chunks/en-jvJ-d-Qq.mjs.map +1 -0
- package/dist/_chunks/{index-BWyhWRPa.mjs → index-53jX2hhF.mjs} +28 -36
- package/dist/_chunks/index-53jX2hhF.mjs.map +1 -0
- package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs +16421 -0
- package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs.map +1 -0
- package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js +16446 -0
- package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js.map +1 -0
- package/dist/_chunks/{index-kKUYoIsq.mjs → index-A3oJlPcE.mjs} +111 -108
- package/dist/_chunks/index-A3oJlPcE.mjs.map +1 -0
- package/dist/_chunks/{index-MfP0ffb0.js → index-MEUac_4V.js} +124 -122
- package/dist/_chunks/index-MEUac_4V.js.map +1 -0
- package/dist/_chunks/index-N-GcFWtg.mjs +261 -0
- package/dist/_chunks/index-N-GcFWtg.mjs.map +1 -0
- package/dist/_chunks/{index-tUo88Kqt.js → index-TJUxOCtJ.js} +28 -36
- package/dist/_chunks/index-TJUxOCtJ.js.map +1 -0
- package/dist/_chunks/{index-sarofNNK.js → index-VgvlwVA7.js} +106 -147
- package/dist/_chunks/index-VgvlwVA7.js.map +1 -0
- package/dist/_chunks/{index-KmMoN4sr.js → index-bRuKnVcH.js} +39 -32
- package/dist/_chunks/index-bRuKnVcH.js.map +1 -0
- package/dist/_chunks/{index-FETf_nGC.mjs → index-ee_14Ldw.mjs} +36 -29
- package/dist/_chunks/index-ee_14Ldw.mjs.map +1 -0
- package/dist/_chunks/index-mzJ2Vb5u.js +280 -0
- package/dist/_chunks/index-mzJ2Vb5u.js.map +1 -0
- package/dist/_chunks/{index-xHL-7Hse.mjs → index-vXywiVeM.mjs} +101 -142
- package/dist/_chunks/index-vXywiVeM.mjs.map +1 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs +39 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs.map +1 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js +57 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/style.css +84 -0
- package/package.json +15 -15
- package/server/bootstrap/grant-config.js +9 -0
- package/server/bootstrap/index.js +2 -39
- package/server/content-types/user/index.js +0 -1
- package/server/controllers/auth.js +24 -53
- package/server/controllers/content-manager-user.js +24 -28
- package/server/controllers/role.js +1 -1
- package/server/controllers/user.js +5 -5
- package/server/middlewares/rateLimit.js +1 -1
- package/server/register.js +1 -1
- package/server/services/jwt.js +3 -3
- package/server/services/permission.js +3 -7
- package/server/services/providers-registry.js +15 -0
- package/server/services/providers.js +10 -5
- package/server/services/role.js +15 -13
- package/server/services/user.js +28 -14
- package/server/services/users-permissions.js +12 -10
- package/server/utils/sanitize/sanitizers.js +2 -2
- package/dist/_chunks/en-CE3wEy_c.mjs.map +0 -1
- package/dist/_chunks/en-m608rMZx.js.map +0 -1
- package/dist/_chunks/index-4W1jrPVd.js +0 -320
- package/dist/_chunks/index-4W1jrPVd.js.map +0 -1
- package/dist/_chunks/index-BWyhWRPa.mjs.map +0 -1
- package/dist/_chunks/index-FETf_nGC.mjs.map +0 -1
- package/dist/_chunks/index-H0k1w1px.mjs +0 -301
- package/dist/_chunks/index-H0k1w1px.mjs.map +0 -1
- package/dist/_chunks/index-KmMoN4sr.js.map +0 -1
- package/dist/_chunks/index-MfP0ffb0.js.map +0 -1
- package/dist/_chunks/index-kKUYoIsq.mjs.map +0 -1
- package/dist/_chunks/index-sarofNNK.js.map +0 -1
- package/dist/_chunks/index-tUo88Kqt.js.map +0 -1
- package/dist/_chunks/index-xHL-7Hse.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
|
|
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(
|
|
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(
|
|
30
|
+
if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {
|
|
32
31
|
throw new ForbiddenError();
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
const
|
|
34
|
+
const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);
|
|
36
35
|
|
|
37
|
-
return { pm,
|
|
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.
|
|
107
|
-
.create(
|
|
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,
|
|
123
|
+
const { pm, doc } = await findEntityAndCheckPermissions(
|
|
132
124
|
userAbility,
|
|
133
125
|
ACTIONS.edit,
|
|
134
126
|
userModel,
|
|
135
|
-
|
|
127
|
+
documentId
|
|
136
128
|
);
|
|
137
|
-
|
|
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.
|
|
171
|
-
.update(
|
|
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
|
},
|
|
@@ -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
|
|
12
|
+
let rateLimitConfig = strapi.config.get('plugin::users-permissions.ratelimit');
|
|
13
13
|
|
|
14
14
|
if (!rateLimitConfig) {
|
|
15
15
|
rateLimitConfig = {
|
package/server/register.js
CHANGED
|
@@ -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.
|
|
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')) {
|
package/server/services/jwt.js
CHANGED
|
@@ -29,10 +29,10 @@ module.exports = ({ strapi }) => ({
|
|
|
29
29
|
},
|
|
30
30
|
|
|
31
31
|
issue(payload, jwtOptions = {}) {
|
|
32
|
-
_.defaults(jwtOptions, strapi.config.get('plugin
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
28
|
-
|
|
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(
|
|
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 {
|
package/server/services/role.js
CHANGED
|
@@ -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.
|
|
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
|
});
|
package/server/services/user.js
CHANGED
|
@@ -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 {
|
|
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(
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
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.
|
|
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,
|
|
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
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|