@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.
- package/admin/src/index.js +31 -28
- package/admin/src/pages/AdvancedSettings/index.js +14 -2
- package/admin/src/pages/AdvancedSettings/utils/form.js +2 -2
- package/admin/src/pages/EmailTemplates/index.js +8 -1
- package/admin/src/pages/Providers/index.js +8 -1
- package/admin/src/pages/Roles/CreatePage/index.js +1 -1
- package/admin/src/pages/Roles/EditPage/index.js +2 -2
- package/admin/src/pages/Roles/ListPage/index.js +1 -1
- package/admin/src/pages/Roles/index.js +14 -8
- package/admin/src/permissions.js +12 -14
- package/admin/src/translations/en.json +4 -0
- package/admin/src/translations/zh-Hans.json +26 -7
- package/documentation/1.0.0/overrides/users-permissions-Role.json +6 -6
- package/package.json +8 -6
- package/{config/functions/bootstrap.js → server/bootstrap/index.js} +9 -18
- package/{config → server/bootstrap}/users-permissions-actions.js +0 -0
- package/server/config.js +23 -0
- package/server/content-types/index.js +11 -0
- package/server/content-types/permission/index.js +31 -0
- package/server/content-types/role/index.js +48 -0
- package/server/content-types/user/index.js +72 -0
- package/{models/User.config.js → server/content-types/user/schema-config.js} +0 -0
- package/{controllers → server/controllers}/auth.js +63 -77
- package/server/controllers/index.js +15 -0
- package/server/controllers/permissions.js +26 -0
- package/server/controllers/role.js +77 -0
- package/server/controllers/settings.js +84 -0
- package/{controllers → server/controllers}/user/admin.js +26 -42
- package/{controllers → server/controllers}/user/api.js +11 -27
- package/{controllers → server/controllers}/user.js +2 -18
- package/{controllers → server/controllers}/validation/email-template.js +0 -0
- package/server/index.js +21 -0
- package/server/policies/index.js +7 -0
- package/{config → server}/policies/rateLimit.js +4 -8
- package/server/register.js +7 -0
- package/server/routes/admin/index.js +10 -0
- package/server/routes/admin/permissions.js +20 -0
- package/server/routes/admin/role.js +79 -0
- package/server/routes/admin/settings.js +95 -0
- package/server/routes/content-api/auth.js +73 -0
- package/server/routes/content-api/index.js +11 -0
- package/server/routes/content-api/permissions.js +9 -0
- package/server/routes/content-api/role.js +29 -0
- package/server/routes/content-api/user.js +61 -0
- package/server/routes/index.js +6 -0
- package/{config → server}/schema.graphql.js +96 -63
- package/server/services/index.js +15 -0
- package/{services → server/services}/jwt.js +12 -14
- package/server/services/providers.js +592 -0
- package/server/services/role.js +182 -0
- package/{services → server/services}/user.js +31 -34
- package/server/services/users-permissions.js +222 -0
- package/server/strategies/users-permissions.js +122 -0
- package/{utils → server/utils}/index.d.ts +6 -1
- package/server/utils/index.js +9 -0
- package/strapi-server.js +3 -0
- package/config/layout.js +0 -10
- package/config/policies/isAuthenticated.js +0 -9
- package/config/policies/permissions.js +0 -94
- package/config/request.json +0 -6
- package/config/routes.json +0 -381
- package/config/security.json +0 -5
- package/controllers/users-permissions.js +0 -271
- package/middlewares/users-permissions/defaults.json +0 -5
- package/middlewares/users-permissions/index.js +0 -40
- package/models/Permission.js +0 -7
- package/models/Permission.settings.json +0 -45
- package/models/Role.js +0 -7
- package/models/Role.settings.json +0 -43
- package/models/User.js +0 -7
- package/models/User.settings.json +0 -63
- package/services/providers.js +0 -598
- package/services/users-permissions.js +0 -430
- package/utils/index.js +0 -11
|
@@ -11,16 +11,16 @@ const formatError = error => [
|
|
|
11
11
|
{ messages: [{ id: error.id, message: error.message, field: error.field }] },
|
|
12
12
|
];
|
|
13
13
|
|
|
14
|
-
const userModel = '
|
|
14
|
+
const userModel = 'plugin::users-permissions.user';
|
|
15
15
|
const ACTIONS = {
|
|
16
|
-
read: '
|
|
17
|
-
create: '
|
|
18
|
-
edit: '
|
|
19
|
-
delete: '
|
|
16
|
+
read: 'plugin::content-manager.explorer.read',
|
|
17
|
+
create: 'plugin::content-manager.explorer.create',
|
|
18
|
+
edit: 'plugin::content-manager.explorer.update',
|
|
19
|
+
delete: 'plugin::content-manager.explorer.delete',
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
const findEntityAndCheckPermissions = async (ability, action, model, id) => {
|
|
23
|
-
const entity = await strapi.query('
|
|
23
|
+
const entity = await strapi.query('plugin::users-permissions.user').findOne({ where: { id } });
|
|
24
24
|
|
|
25
25
|
if (_.isNil(entity)) {
|
|
26
26
|
throw strapi.errors.notFound();
|
|
@@ -29,7 +29,7 @@ const findEntityAndCheckPermissions = async (ability, action, model, id) => {
|
|
|
29
29
|
const pm = strapi.admin.services.permission.createPermissionsManager({ ability, action, model });
|
|
30
30
|
|
|
31
31
|
const roles = _.has(entity, `${CREATED_BY_ATTRIBUTE}.id`)
|
|
32
|
-
? await strapi.query('
|
|
32
|
+
? await strapi.query('admin::role').findMany({
|
|
33
33
|
where: {
|
|
34
34
|
users: { id: entity[CREATED_BY_ATTRIBUTE].id },
|
|
35
35
|
},
|
|
@@ -51,10 +51,9 @@ module.exports = {
|
|
|
51
51
|
* @return {Object}
|
|
52
52
|
*/
|
|
53
53
|
async create(ctx) {
|
|
54
|
-
const {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
} = ctx;
|
|
54
|
+
const { body } = ctx.request;
|
|
55
|
+
const { user: admin, userAbility } = ctx.state;
|
|
56
|
+
|
|
58
57
|
const { email, username, password } = body;
|
|
59
58
|
|
|
60
59
|
const pm = strapi.admin.services.permission.createPermissionsManager({
|
|
@@ -70,12 +69,7 @@ module.exports = {
|
|
|
70
69
|
const sanitizedBody = pm.pickPermittedFieldsOf(body, { subject: userModel });
|
|
71
70
|
|
|
72
71
|
const advanced = await strapi
|
|
73
|
-
.store({
|
|
74
|
-
environment: '',
|
|
75
|
-
type: 'plugin',
|
|
76
|
-
name: 'users-permissions',
|
|
77
|
-
key: 'advanced',
|
|
78
|
-
})
|
|
72
|
+
.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
|
|
79
73
|
.get();
|
|
80
74
|
|
|
81
75
|
if (!email) return ctx.badRequest('missing.email');
|
|
@@ -83,7 +77,7 @@ module.exports = {
|
|
|
83
77
|
if (!password) return ctx.badRequest('missing.password');
|
|
84
78
|
|
|
85
79
|
const userWithSameUsername = await strapi
|
|
86
|
-
.query('
|
|
80
|
+
.query('plugin::users-permissions.user')
|
|
87
81
|
.findOne({ where: { username } });
|
|
88
82
|
|
|
89
83
|
if (userWithSameUsername) {
|
|
@@ -99,7 +93,7 @@ module.exports = {
|
|
|
99
93
|
|
|
100
94
|
if (advanced.unique_email) {
|
|
101
95
|
const userWithSameEmail = await strapi
|
|
102
|
-
.query('
|
|
96
|
+
.query('plugin::users-permissions.user')
|
|
103
97
|
.findOne({ where: { email: email.toLowerCase() } });
|
|
104
98
|
|
|
105
99
|
if (userWithSameEmail) {
|
|
@@ -122,18 +116,18 @@ module.exports = {
|
|
|
122
116
|
[UPDATED_BY_ATTRIBUTE]: admin.id,
|
|
123
117
|
};
|
|
124
118
|
|
|
125
|
-
user.email = user.email
|
|
119
|
+
user.email = _.toLower(user.email);
|
|
126
120
|
|
|
127
121
|
if (!user.role) {
|
|
128
122
|
const defaultRole = await strapi
|
|
129
|
-
.query('
|
|
123
|
+
.query('plugin::users-permissions.role')
|
|
130
124
|
.findOne({ where: { type: advanced.default_role } });
|
|
131
125
|
|
|
132
126
|
user.role = defaultRole.id;
|
|
133
127
|
}
|
|
134
128
|
|
|
135
129
|
try {
|
|
136
|
-
const data = await
|
|
130
|
+
const data = await getService('user').add(user);
|
|
137
131
|
|
|
138
132
|
ctx.created(pm.sanitize(data, { action: ACTIONS.read }));
|
|
139
133
|
} catch (error) {
|
|
@@ -146,20 +140,14 @@ module.exports = {
|
|
|
146
140
|
*/
|
|
147
141
|
|
|
148
142
|
async update(ctx) {
|
|
143
|
+
const { id } = ctx.params;
|
|
144
|
+
const { body } = ctx.request;
|
|
145
|
+
const { user: admin, userAbility } = ctx.state;
|
|
146
|
+
|
|
149
147
|
const advancedConfigs = await strapi
|
|
150
|
-
.store({
|
|
151
|
-
environment: '',
|
|
152
|
-
type: 'plugin',
|
|
153
|
-
name: 'users-permissions',
|
|
154
|
-
key: 'advanced',
|
|
155
|
-
})
|
|
148
|
+
.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
|
|
156
149
|
.get();
|
|
157
150
|
|
|
158
|
-
const {
|
|
159
|
-
params: { id },
|
|
160
|
-
request: { body },
|
|
161
|
-
state: { userAbility, admin },
|
|
162
|
-
} = ctx;
|
|
163
151
|
const { email, username, password } = body;
|
|
164
152
|
|
|
165
153
|
const { pm, entity: user } = await findEntityAndCheckPermissions(
|
|
@@ -183,7 +171,7 @@ module.exports = {
|
|
|
183
171
|
|
|
184
172
|
if (_.has(body, 'username')) {
|
|
185
173
|
const userWithSameUsername = await strapi
|
|
186
|
-
.query('
|
|
174
|
+
.query('plugin::users-permissions.user')
|
|
187
175
|
.findOne({ where: { username } });
|
|
188
176
|
|
|
189
177
|
if (userWithSameUsername && userWithSameUsername.id != id) {
|
|
@@ -200,8 +188,8 @@ module.exports = {
|
|
|
200
188
|
|
|
201
189
|
if (_.has(body, 'email') && advancedConfigs.unique_email) {
|
|
202
190
|
const userWithSameEmail = await strapi
|
|
203
|
-
.query('
|
|
204
|
-
.findOne({ where: { email:
|
|
191
|
+
.query('plugin::users-permissions.user')
|
|
192
|
+
.findOne({ where: { email: _.toLower(email) } });
|
|
205
193
|
|
|
206
194
|
if (userWithSameEmail && userWithSameEmail.id != id) {
|
|
207
195
|
return ctx.badRequest(
|
|
@@ -213,15 +201,11 @@ module.exports = {
|
|
|
213
201
|
})
|
|
214
202
|
);
|
|
215
203
|
}
|
|
216
|
-
body.email = body.email
|
|
204
|
+
body.email = _.toLower(body.email);
|
|
217
205
|
}
|
|
218
206
|
|
|
219
207
|
const sanitizedData = pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });
|
|
220
|
-
const updateData = _.omit({ ...sanitizedData,
|
|
221
|
-
|
|
222
|
-
if (_.has(body, 'password') && password === user.password) {
|
|
223
|
-
delete updateData.password;
|
|
224
|
-
}
|
|
208
|
+
const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');
|
|
225
209
|
|
|
226
210
|
const data = await getService('user').edit({ id }, updateData);
|
|
227
211
|
|
|
@@ -6,7 +6,7 @@ const { getService } = require('../../utils');
|
|
|
6
6
|
|
|
7
7
|
const sanitizeUser = user =>
|
|
8
8
|
sanitizeEntity(user, {
|
|
9
|
-
model: strapi.getModel('
|
|
9
|
+
model: strapi.getModel('plugin::users-permissions.user'),
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
const formatError = error => [
|
|
@@ -20,12 +20,7 @@ module.exports = {
|
|
|
20
20
|
*/
|
|
21
21
|
async create(ctx) {
|
|
22
22
|
const advanced = await strapi
|
|
23
|
-
.store({
|
|
24
|
-
environment: '',
|
|
25
|
-
type: 'plugin',
|
|
26
|
-
name: 'users-permissions',
|
|
27
|
-
key: 'advanced',
|
|
28
|
-
})
|
|
23
|
+
.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
|
|
29
24
|
.get();
|
|
30
25
|
|
|
31
26
|
const { email, username, password, role } = ctx.request.body;
|
|
@@ -35,7 +30,7 @@ module.exports = {
|
|
|
35
30
|
if (!password) return ctx.badRequest('missing.password');
|
|
36
31
|
|
|
37
32
|
const userWithSameUsername = await strapi
|
|
38
|
-
.query('
|
|
33
|
+
.query('plugin::users-permissions.user')
|
|
39
34
|
.findOne({ where: { username } });
|
|
40
35
|
|
|
41
36
|
if (userWithSameUsername) {
|
|
@@ -51,7 +46,7 @@ module.exports = {
|
|
|
51
46
|
|
|
52
47
|
if (advanced.unique_email) {
|
|
53
48
|
const userWithSameEmail = await strapi
|
|
54
|
-
.query('
|
|
49
|
+
.query('plugin::users-permissions.user')
|
|
55
50
|
.findOne({ where: { email: email.toLowerCase() } });
|
|
56
51
|
|
|
57
52
|
if (userWithSameEmail) {
|
|
@@ -72,11 +67,11 @@ module.exports = {
|
|
|
72
67
|
provider: 'local',
|
|
73
68
|
};
|
|
74
69
|
|
|
75
|
-
user.email = user.email
|
|
70
|
+
user.email = _.toLower(user.email);
|
|
76
71
|
|
|
77
72
|
if (!role) {
|
|
78
73
|
const defaultRole = await strapi
|
|
79
|
-
.query('
|
|
74
|
+
.query('plugin::users-permissions.role')
|
|
80
75
|
.findOne({ where: { type: advanced.default_role } });
|
|
81
76
|
|
|
82
77
|
user.role = defaultRole.id;
|
|
@@ -90,27 +85,20 @@ module.exports = {
|
|
|
90
85
|
ctx.badRequest(null, formatError(error));
|
|
91
86
|
}
|
|
92
87
|
},
|
|
88
|
+
|
|
93
89
|
/**
|
|
94
90
|
* Update a/an user record.
|
|
95
91
|
* @return {Object}
|
|
96
92
|
*/
|
|
97
|
-
|
|
98
93
|
async update(ctx) {
|
|
99
94
|
const advancedConfigs = await strapi
|
|
100
|
-
.store({
|
|
101
|
-
environment: '',
|
|
102
|
-
type: 'plugin',
|
|
103
|
-
name: 'users-permissions',
|
|
104
|
-
key: 'advanced',
|
|
105
|
-
})
|
|
95
|
+
.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
|
|
106
96
|
.get();
|
|
107
97
|
|
|
108
98
|
const { id } = ctx.params;
|
|
109
99
|
const { email, username, password } = ctx.request.body;
|
|
110
100
|
|
|
111
|
-
const user = await getService('user').fetch({
|
|
112
|
-
id,
|
|
113
|
-
});
|
|
101
|
+
const user = await getService('user').fetch({ id });
|
|
114
102
|
|
|
115
103
|
if (_.has(ctx.request.body, 'email') && !email) {
|
|
116
104
|
return ctx.badRequest('email.notNull');
|
|
@@ -126,7 +114,7 @@ module.exports = {
|
|
|
126
114
|
|
|
127
115
|
if (_.has(ctx.request.body, 'username')) {
|
|
128
116
|
const userWithSameUsername = await strapi
|
|
129
|
-
.query('
|
|
117
|
+
.query('plugin::users-permissions.user')
|
|
130
118
|
.findOne({ where: { username } });
|
|
131
119
|
|
|
132
120
|
if (userWithSameUsername && userWithSameUsername.id != id) {
|
|
@@ -143,7 +131,7 @@ module.exports = {
|
|
|
143
131
|
|
|
144
132
|
if (_.has(ctx.request.body, 'email') && advancedConfigs.unique_email) {
|
|
145
133
|
const userWithSameEmail = await strapi
|
|
146
|
-
.query('
|
|
134
|
+
.query('plugin::users-permissions.user')
|
|
147
135
|
.findOne({ where: { email: email.toLowerCase() } });
|
|
148
136
|
|
|
149
137
|
if (userWithSameEmail && userWithSameEmail.id != id) {
|
|
@@ -163,10 +151,6 @@ module.exports = {
|
|
|
163
151
|
...ctx.request.body,
|
|
164
152
|
};
|
|
165
153
|
|
|
166
|
-
if (_.has(ctx.request.body, 'password') && password === user.password) {
|
|
167
|
-
delete updateData.password;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
154
|
const data = await getService('user').edit({ id }, updateData);
|
|
171
155
|
|
|
172
156
|
ctx.send(sanitizeUser(data));
|
|
@@ -14,7 +14,7 @@ const apiUserController = require('./user/api');
|
|
|
14
14
|
|
|
15
15
|
const sanitizeUser = user =>
|
|
16
16
|
sanitizeEntity(user, {
|
|
17
|
-
model: strapi.getModel('
|
|
17
|
+
model: strapi.getModel('plugin::users-permissions.user'),
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
const resolveController = ctx => {
|
|
@@ -62,7 +62,6 @@ module.exports = {
|
|
|
62
62
|
data = sanitizeUser(data);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
// Send 200 `ok`
|
|
66
65
|
ctx.body = data;
|
|
67
66
|
},
|
|
68
67
|
|
|
@@ -86,21 +85,6 @@ module.exports = {
|
|
|
86
85
|
ctx.send(sanitizeUser(data));
|
|
87
86
|
},
|
|
88
87
|
|
|
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
88
|
/**
|
|
105
89
|
* Retrieve authenticated user.
|
|
106
90
|
* @return {Object|Array}
|
|
@@ -109,7 +93,7 @@ module.exports = {
|
|
|
109
93
|
const user = ctx.state.user;
|
|
110
94
|
|
|
111
95
|
if (!user) {
|
|
112
|
-
return ctx.badRequest(
|
|
96
|
+
return ctx.badRequest('Unauthenticated request');
|
|
113
97
|
}
|
|
114
98
|
|
|
115
99
|
ctx.body = sanitizeUser(user);
|
|
File without changes
|
package/server/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const register = require('./register');
|
|
4
|
+
const bootstrap = require('./bootstrap');
|
|
5
|
+
const contentTypes = require('./content-types');
|
|
6
|
+
const policies = require('./policies');
|
|
7
|
+
const services = require('./services');
|
|
8
|
+
const routes = require('./routes');
|
|
9
|
+
const controllers = require('./controllers');
|
|
10
|
+
const config = require('./config');
|
|
11
|
+
|
|
12
|
+
module.exports = () => ({
|
|
13
|
+
register,
|
|
14
|
+
bootstrap,
|
|
15
|
+
config,
|
|
16
|
+
routes,
|
|
17
|
+
controllers,
|
|
18
|
+
contentTypes,
|
|
19
|
+
policies,
|
|
20
|
+
services,
|
|
21
|
+
});
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const lazyRateLimit = {
|
|
4
|
-
get RateLimit() {
|
|
5
|
-
return require('koa2-ratelimit').RateLimit;
|
|
6
|
-
},
|
|
7
|
-
};
|
|
8
|
-
|
|
9
3
|
module.exports = async (ctx, next) => {
|
|
4
|
+
const ratelimit = require('koa2-ratelimit').RateLimit;
|
|
5
|
+
|
|
10
6
|
const message = [
|
|
11
7
|
{
|
|
12
8
|
messages: [
|
|
@@ -18,7 +14,7 @@ module.exports = async (ctx, next) => {
|
|
|
18
14
|
},
|
|
19
15
|
];
|
|
20
16
|
|
|
21
|
-
return
|
|
17
|
+
return ratelimit.middleware(
|
|
22
18
|
Object.assign(
|
|
23
19
|
{},
|
|
24
20
|
{
|
|
@@ -27,7 +23,7 @@ module.exports = async (ctx, next) => {
|
|
|
27
23
|
prefixKey: `${ctx.request.path}:${ctx.request.ip}`,
|
|
28
24
|
message,
|
|
29
25
|
},
|
|
30
|
-
strapi.
|
|
26
|
+
strapi.config.get('plugin.users-permissions.ratelimit')
|
|
31
27
|
)
|
|
32
28
|
)(ctx, next);
|
|
33
29
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const permissionsRoutes = require('./permissions');
|
|
4
|
+
const settingsRoutes = require('./settings');
|
|
5
|
+
const roleRoutes = require('./role');
|
|
6
|
+
|
|
7
|
+
module.exports = {
|
|
8
|
+
type: 'admin',
|
|
9
|
+
routes: [...roleRoutes, ...settingsRoutes, ...permissionsRoutes],
|
|
10
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
method: 'GET',
|
|
6
|
+
path: '/permissions',
|
|
7
|
+
handler: 'permissions.getPermissions',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
method: 'GET',
|
|
11
|
+
path: '/policies',
|
|
12
|
+
handler: 'permissions.getPolicies',
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
{
|
|
16
|
+
method: 'GET',
|
|
17
|
+
path: '/routes',
|
|
18
|
+
handler: 'permissions.getRoutes',
|
|
19
|
+
},
|
|
20
|
+
];
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
method: 'GET',
|
|
6
|
+
path: '/roles/:id',
|
|
7
|
+
handler: 'role.getRole',
|
|
8
|
+
config: {
|
|
9
|
+
policies: [
|
|
10
|
+
{
|
|
11
|
+
name: 'admin::hasPermissions',
|
|
12
|
+
options: {
|
|
13
|
+
actions: ['plugin::users-permissions.roles.read'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
method: 'GET',
|
|
21
|
+
path: '/roles',
|
|
22
|
+
handler: 'role.getRoles',
|
|
23
|
+
config: {
|
|
24
|
+
policies: [
|
|
25
|
+
{
|
|
26
|
+
name: 'admin::hasPermissions',
|
|
27
|
+
options: {
|
|
28
|
+
actions: ['plugin::users-permissions.roles.read'],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
method: 'POST',
|
|
36
|
+
path: '/roles',
|
|
37
|
+
handler: 'role.createRole',
|
|
38
|
+
config: {
|
|
39
|
+
policies: [
|
|
40
|
+
{
|
|
41
|
+
name: 'admin::hasPermissions',
|
|
42
|
+
options: {
|
|
43
|
+
actions: ['plugin::users-permissions.roles.create'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
method: 'PUT',
|
|
51
|
+
path: '/roles/:role',
|
|
52
|
+
handler: 'role.updateRole',
|
|
53
|
+
config: {
|
|
54
|
+
policies: [
|
|
55
|
+
{
|
|
56
|
+
name: 'admin::hasPermissions',
|
|
57
|
+
options: {
|
|
58
|
+
actions: ['plugin::users-permissions.roles.update'],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
method: 'DELETE',
|
|
66
|
+
path: '/roles/:role',
|
|
67
|
+
handler: 'role.deleteRole',
|
|
68
|
+
config: {
|
|
69
|
+
policies: [
|
|
70
|
+
{
|
|
71
|
+
name: 'admin::hasPermissions',
|
|
72
|
+
options: {
|
|
73
|
+
actions: ['plugin::users-permissions.roles.delete'],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
method: 'GET',
|
|
6
|
+
path: '/email-templates',
|
|
7
|
+
handler: 'settings.getEmailTemplate',
|
|
8
|
+
config: {
|
|
9
|
+
policies: [
|
|
10
|
+
{
|
|
11
|
+
name: 'admin::hasPermissions',
|
|
12
|
+
options: {
|
|
13
|
+
actions: ['plugin::users-permissions.email-templates.read'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
method: 'PUT',
|
|
21
|
+
path: '/email-templates',
|
|
22
|
+
handler: 'settings.updateEmailTemplate',
|
|
23
|
+
config: {
|
|
24
|
+
policies: [
|
|
25
|
+
{
|
|
26
|
+
name: 'admin::hasPermissions',
|
|
27
|
+
options: {
|
|
28
|
+
actions: ['plugin::users-permissions.email-templates.update'],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
method: 'GET',
|
|
36
|
+
path: '/advanced',
|
|
37
|
+
handler: 'settings.getAdvancedSettings',
|
|
38
|
+
config: {
|
|
39
|
+
policies: [
|
|
40
|
+
{
|
|
41
|
+
name: 'admin::hasPermissions',
|
|
42
|
+
options: {
|
|
43
|
+
actions: ['plugin::users-permissions.advanced-settings.read'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
method: 'PUT',
|
|
51
|
+
path: '/advanced',
|
|
52
|
+
handler: 'settings.updateAdvancedSettings',
|
|
53
|
+
config: {
|
|
54
|
+
policies: [
|
|
55
|
+
{
|
|
56
|
+
name: 'admin::hasPermissions',
|
|
57
|
+
options: {
|
|
58
|
+
actions: ['plugin::users-permissions.advanced-settings.update'],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
method: 'GET',
|
|
66
|
+
path: '/providers',
|
|
67
|
+
handler: 'settings.getProviders',
|
|
68
|
+
config: {
|
|
69
|
+
policies: [
|
|
70
|
+
{
|
|
71
|
+
name: 'admin::hasPermissions',
|
|
72
|
+
options: {
|
|
73
|
+
actions: ['plugin::users-permissions.providers.read'],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
{
|
|
81
|
+
method: 'PUT',
|
|
82
|
+
path: '/providers',
|
|
83
|
+
handler: 'settings.updateProviders',
|
|
84
|
+
config: {
|
|
85
|
+
policies: [
|
|
86
|
+
{
|
|
87
|
+
name: 'admin::hasPermissions',
|
|
88
|
+
options: {
|
|
89
|
+
actions: ['plugin::users-permissions.providers.update'],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
];
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
method: 'GET',
|
|
6
|
+
path: '/connect/(.*)',
|
|
7
|
+
handler: 'auth.connect',
|
|
8
|
+
config: {
|
|
9
|
+
policies: ['plugin::users-permissions.rateLimit'],
|
|
10
|
+
prefix: '',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
method: 'POST',
|
|
15
|
+
path: '/auth/local',
|
|
16
|
+
handler: 'auth.callback',
|
|
17
|
+
config: {
|
|
18
|
+
policies: ['plugin::users-permissions.rateLimit'],
|
|
19
|
+
prefix: '',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
method: 'POST',
|
|
24
|
+
path: '/auth/local/register',
|
|
25
|
+
handler: 'auth.register',
|
|
26
|
+
config: {
|
|
27
|
+
policies: ['plugin::users-permissions.rateLimit'],
|
|
28
|
+
prefix: '',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
method: 'GET',
|
|
33
|
+
path: '/auth/:provider/callback',
|
|
34
|
+
handler: 'auth.callback',
|
|
35
|
+
config: {
|
|
36
|
+
prefix: '',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
method: 'POST',
|
|
41
|
+
path: '/auth/forgot-password',
|
|
42
|
+
handler: 'auth.forgotPassword',
|
|
43
|
+
config: {
|
|
44
|
+
policies: ['plugin::users-permissions.rateLimit'],
|
|
45
|
+
prefix: '',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
method: 'POST',
|
|
50
|
+
path: '/auth/reset-password',
|
|
51
|
+
handler: 'auth.resetPassword',
|
|
52
|
+
config: {
|
|
53
|
+
policies: ['plugin::users-permissions.rateLimit'],
|
|
54
|
+
prefix: '',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
method: 'GET',
|
|
59
|
+
path: '/auth/email-confirmation',
|
|
60
|
+
handler: 'auth.emailConfirmation',
|
|
61
|
+
config: {
|
|
62
|
+
prefix: '',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
method: 'POST',
|
|
67
|
+
path: '/auth/send-email-confirmation',
|
|
68
|
+
handler: 'auth.sendEmailConfirmation',
|
|
69
|
+
config: {
|
|
70
|
+
prefix: '',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const authRoutes = require('./auth');
|
|
4
|
+
const userRoutes = require('./user');
|
|
5
|
+
const roleRoutes = require('./role');
|
|
6
|
+
const permissionsRoutes = require('./permissions');
|
|
7
|
+
|
|
8
|
+
module.exports = {
|
|
9
|
+
type: 'content-api',
|
|
10
|
+
routes: [...authRoutes, ...userRoutes, ...roleRoutes, ...permissionsRoutes],
|
|
11
|
+
};
|