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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/admin/src/components/BoundRoute/getMethodColor.js +41 -0
  2. package/admin/src/components/BoundRoute/index.js +40 -24
  3. package/admin/src/components/FormModal/Input/index.js +121 -0
  4. package/admin/src/components/FormModal/index.js +123 -0
  5. package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.js +19 -26
  6. package/admin/src/components/Permissions/PermissionRow/SubCategory.js +118 -0
  7. package/admin/src/components/Permissions/PermissionRow/index.js +9 -48
  8. package/admin/src/components/Permissions/index.js +36 -24
  9. package/admin/src/components/Permissions/init.js +1 -6
  10. package/admin/src/components/Policies/index.js +46 -47
  11. package/admin/src/components/UsersPermissions/index.js +29 -26
  12. package/admin/src/components/UsersPermissions/init.js +1 -2
  13. package/admin/src/hooks/useFetchRole/index.js +17 -7
  14. package/admin/src/hooks/useForm/index.js +3 -29
  15. package/admin/src/hooks/useForm/reducer.js +2 -21
  16. package/admin/src/hooks/usePlugins/index.js +12 -21
  17. package/admin/src/hooks/usePlugins/reducer.js +0 -3
  18. package/admin/src/index.js +29 -34
  19. package/admin/src/pages/AdvancedSettings/index.js +210 -193
  20. package/admin/src/pages/AdvancedSettings/utils/api.js +13 -0
  21. package/admin/src/pages/AdvancedSettings/utils/layout.js +96 -0
  22. package/admin/src/pages/AdvancedSettings/utils/schema.js +22 -0
  23. package/admin/src/pages/EmailTemplates/components/EmailForm.js +173 -0
  24. package/admin/src/pages/EmailTemplates/components/EmailTable.js +116 -0
  25. package/admin/src/pages/EmailTemplates/index.js +125 -198
  26. package/admin/src/pages/EmailTemplates/utils/api.js +13 -0
  27. package/admin/src/pages/Providers/index.js +208 -216
  28. package/admin/src/pages/Providers/utils/api.js +21 -0
  29. package/admin/src/pages/Providers/utils/forms.js +168 -126
  30. package/admin/src/pages/Roles/CreatePage/index.js +155 -147
  31. package/admin/src/pages/Roles/EditPage/index.js +162 -134
  32. package/admin/src/pages/Roles/ListPage/components/TableBody.js +96 -0
  33. package/admin/src/pages/Roles/ListPage/index.js +176 -156
  34. package/admin/src/pages/Roles/ListPage/utils/api.js +28 -0
  35. package/admin/src/pages/Roles/index.js +14 -8
  36. package/admin/src/permissions.js +12 -14
  37. package/admin/src/translations/ar.json +0 -8
  38. package/admin/src/translations/cs.json +0 -8
  39. package/admin/src/translations/de.json +0 -8
  40. package/admin/src/translations/dk.json +0 -8
  41. package/admin/src/translations/en.json +33 -12
  42. package/admin/src/translations/es.json +0 -8
  43. package/admin/src/translations/fr.json +0 -8
  44. package/admin/src/translations/id.json +0 -8
  45. package/admin/src/translations/it.json +0 -8
  46. package/admin/src/translations/ja.json +0 -8
  47. package/admin/src/translations/ko.json +0 -8
  48. package/admin/src/translations/ms.json +0 -8
  49. package/admin/src/translations/nl.json +0 -8
  50. package/admin/src/translations/pl.json +0 -8
  51. package/admin/src/translations/pt-BR.json +0 -8
  52. package/admin/src/translations/pt.json +0 -8
  53. package/admin/src/translations/ru.json +0 -8
  54. package/admin/src/translations/sk.json +0 -8
  55. package/admin/src/translations/sv.json +0 -8
  56. package/admin/src/translations/th.json +0 -8
  57. package/admin/src/translations/tr.json +0 -8
  58. package/admin/src/translations/uk.json +0 -8
  59. package/admin/src/translations/vi.json +0 -8
  60. package/admin/src/translations/zh-Hans.json +5 -14
  61. package/admin/src/translations/zh.json +0 -8
  62. package/admin/src/utils/axiosInstance.js +36 -0
  63. package/admin/src/utils/formatPluginName.js +26 -0
  64. package/admin/src/utils/index.js +1 -0
  65. package/documentation/1.0.0/overrides/users-permissions-Role.json +6 -6
  66. package/documentation/1.0.0/overrides/users-permissions-User.json +7 -7
  67. package/package.json +30 -29
  68. package/{config/functions/bootstrap.js → server/bootstrap/index.js} +26 -33
  69. package/{config → server/bootstrap}/users-permissions-actions.js +0 -0
  70. package/server/config.js +23 -0
  71. package/server/content-types/index.js +11 -0
  72. package/server/content-types/permission/index.js +34 -0
  73. package/server/content-types/role/index.js +51 -0
  74. package/server/content-types/user/index.js +72 -0
  75. package/{models/User.config.js → server/content-types/user/schema-config.js} +0 -0
  76. package/server/controllers/auth.js +440 -0
  77. package/server/controllers/content-manager-user.js +183 -0
  78. package/server/controllers/index.js +17 -0
  79. package/server/controllers/permissions.js +26 -0
  80. package/server/controllers/role.js +77 -0
  81. package/server/controllers/settings.js +85 -0
  82. package/server/controllers/user.js +191 -0
  83. package/server/controllers/validation/auth.js +29 -0
  84. package/{controllers → server/controllers}/validation/email-template.js +0 -0
  85. package/server/controllers/validation/user.js +38 -0
  86. package/server/graphql/index.js +44 -0
  87. package/server/graphql/mutations/auth/email-confirmation.js +39 -0
  88. package/server/graphql/mutations/auth/forgot-password.js +38 -0
  89. package/server/graphql/mutations/auth/login.js +38 -0
  90. package/server/graphql/mutations/auth/register.js +39 -0
  91. package/server/graphql/mutations/auth/reset-password.js +41 -0
  92. package/server/graphql/mutations/crud/role/create-role.js +37 -0
  93. package/server/graphql/mutations/crud/role/delete-role.js +28 -0
  94. package/server/graphql/mutations/crud/role/update-role.js +38 -0
  95. package/server/graphql/mutations/crud/user/create-user.js +48 -0
  96. package/server/graphql/mutations/crud/user/delete-user.js +42 -0
  97. package/server/graphql/mutations/crud/user/update-user.js +49 -0
  98. package/server/graphql/mutations/index.js +42 -0
  99. package/server/graphql/queries/index.js +13 -0
  100. package/server/graphql/queries/me.js +17 -0
  101. package/server/graphql/resolvers-configs.js +37 -0
  102. package/server/graphql/types/create-role-payload.js +11 -0
  103. package/server/graphql/types/delete-role-payload.js +11 -0
  104. package/server/graphql/types/index.js +21 -0
  105. package/server/graphql/types/login-input.js +13 -0
  106. package/server/graphql/types/login-payload.js +12 -0
  107. package/server/graphql/types/me-role.js +14 -0
  108. package/server/graphql/types/me.js +16 -0
  109. package/server/graphql/types/password-payload.js +11 -0
  110. package/server/graphql/types/register-input.js +13 -0
  111. package/server/graphql/types/update-role-payload.js +11 -0
  112. package/server/graphql/utils.js +27 -0
  113. package/server/index.js +21 -0
  114. package/server/middlewares/index.js +7 -0
  115. package/{config/policies → server/middlewares}/rateLimit.js +4 -8
  116. package/server/register.js +11 -0
  117. package/server/routes/admin/index.js +10 -0
  118. package/server/routes/admin/permissions.js +20 -0
  119. package/server/routes/admin/role.js +79 -0
  120. package/server/routes/admin/settings.js +95 -0
  121. package/server/routes/content-api/auth.js +73 -0
  122. package/server/routes/content-api/index.js +11 -0
  123. package/server/routes/content-api/permissions.js +9 -0
  124. package/server/routes/content-api/role.js +29 -0
  125. package/server/routes/content-api/user.js +61 -0
  126. package/server/routes/index.js +6 -0
  127. package/server/services/index.js +15 -0
  128. package/server/services/jwt.js +55 -0
  129. package/server/services/providers.js +599 -0
  130. package/server/services/role.js +177 -0
  131. package/{services → server/services}/user.js +32 -35
  132. package/server/services/users-permissions.js +233 -0
  133. package/server/strategies/users-permissions.js +123 -0
  134. package/{utils → server/utils}/index.d.ts +6 -1
  135. package/server/utils/index.js +9 -0
  136. package/strapi-admin.js +3 -0
  137. package/strapi-server.js +3 -0
  138. package/admin/src/assets/images/logo.svg +0 -1
  139. package/admin/src/components/BaselineAlignement/index.js +0 -33
  140. package/admin/src/components/Bloc/index.js +0 -10
  141. package/admin/src/components/BoundRoute/Components.js +0 -78
  142. package/admin/src/components/ContainerFluid/index.js +0 -13
  143. package/admin/src/components/FormBloc/index.js +0 -61
  144. package/admin/src/components/IntlInput/index.js +0 -38
  145. package/admin/src/components/ListBaselineAlignment/index.js +0 -8
  146. package/admin/src/components/ListRow/Components.js +0 -74
  147. package/admin/src/components/ListRow/index.js +0 -35
  148. package/admin/src/components/ModalForm/Wrapper.js +0 -12
  149. package/admin/src/components/ModalForm/index.js +0 -59
  150. package/admin/src/components/Permissions/ListWrapper.js +0 -9
  151. package/admin/src/components/Permissions/PermissionRow/BaselineAlignment.js +0 -7
  152. package/admin/src/components/Permissions/PermissionRow/RowStyle.js +0 -28
  153. package/admin/src/components/Permissions/PermissionRow/SubCategory/ConditionsButtonWrapper.js +0 -13
  154. package/admin/src/components/Permissions/PermissionRow/SubCategory/PolicyWrapper.js +0 -8
  155. package/admin/src/components/Permissions/PermissionRow/SubCategory/SubCategoryWrapper.js +0 -26
  156. package/admin/src/components/Permissions/PermissionRow/SubCategory/index.js +0 -116
  157. package/admin/src/components/Policies/Components.js +0 -26
  158. package/admin/src/components/PrefixedIcon/index.js +0 -27
  159. package/admin/src/components/Roles/EmptyRole/BaselineAlignment.js +0 -7
  160. package/admin/src/components/Roles/EmptyRole/index.js +0 -27
  161. package/admin/src/components/Roles/RoleListWrapper/index.js +0 -17
  162. package/admin/src/components/Roles/RoleRow/RoleDescription.js +0 -9
  163. package/admin/src/components/Roles/RoleRow/index.js +0 -45
  164. package/admin/src/components/Roles/index.js +0 -3
  165. package/admin/src/components/SizedInput/index.js +0 -24
  166. package/admin/src/pages/AdvancedSettings/reducer.js +0 -65
  167. package/admin/src/pages/AdvancedSettings/utils/form.js +0 -52
  168. package/admin/src/pages/EmailTemplates/CustomTextInput.js +0 -105
  169. package/admin/src/pages/EmailTemplates/Wrapper.js +0 -36
  170. package/admin/src/pages/EmailTemplates/reducer.js +0 -58
  171. package/admin/src/pages/EmailTemplates/utils/forms.js +0 -81
  172. package/admin/src/pages/Roles/ListPage/BaselineAlignment.js +0 -8
  173. package/config/layout.js +0 -10
  174. package/config/policies/isAuthenticated.js +0 -9
  175. package/config/policies/permissions.js +0 -94
  176. package/config/request.json +0 -6
  177. package/config/routes.json +0 -381
  178. package/config/schema.graphql.js +0 -284
  179. package/config/security.json +0 -5
  180. package/controllers/auth.js +0 -596
  181. package/controllers/user/admin.js +0 -230
  182. package/controllers/user/api.js +0 -174
  183. package/controllers/user.js +0 -117
  184. package/controllers/users-permissions.js +0 -271
  185. package/middlewares/users-permissions/defaults.json +0 -5
  186. package/middlewares/users-permissions/index.js +0 -40
  187. package/models/Permission.js +0 -7
  188. package/models/Permission.settings.json +0 -45
  189. package/models/Role.js +0 -7
  190. package/models/Role.settings.json +0 -43
  191. package/models/User.js +0 -7
  192. package/models/User.settings.json +0 -63
  193. package/services/jwt.js +0 -65
  194. package/services/providers.js +0 -598
  195. package/services/users-permissions.js +0 -429
  196. package/utils/index.js +0 -11
@@ -1,429 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
- const request = require('request');
5
- const { getService } = require('../utils');
6
-
7
- const DEFAULT_PERMISSIONS = [
8
- { action: 'admincallback', controller: 'auth', type: 'users-permissions', roleType: 'public' },
9
- { action: 'adminregister', controller: 'auth', type: 'users-permissions', roleType: 'public' },
10
- { action: 'callback', controller: 'auth', type: 'users-permissions', roleType: 'public' },
11
- { action: 'connect', controller: 'auth', type: 'users-permissions', roleType: null },
12
- { action: 'forgotpassword', controller: 'auth', type: 'users-permissions', roleType: 'public' },
13
- { action: 'resetpassword', controller: 'auth', type: 'users-permissions', roleType: 'public' },
14
- { action: 'register', controller: 'auth', type: 'users-permissions', roleType: 'public' },
15
- {
16
- action: 'emailconfirmation',
17
- controller: 'auth',
18
- type: 'users-permissions',
19
- roleType: 'public',
20
- },
21
- { action: 'me', controller: 'user', type: 'users-permissions', roleType: null },
22
- ];
23
-
24
- const isEnabledByDefault = (permission, role) => {
25
- return DEFAULT_PERMISSIONS.some(
26
- defaultPerm =>
27
- (defaultPerm.action === null || permission.action === defaultPerm.action) &&
28
- (defaultPerm.controller === null || permission.controller === defaultPerm.controller) &&
29
- (defaultPerm.type === null || permission.type === defaultPerm.type) &&
30
- (defaultPerm.roleType === null || role.type === defaultPerm.roleType)
31
- );
32
- };
33
-
34
- module.exports = {
35
- async createRole(params) {
36
- if (!params.type) {
37
- params.type = _.snakeCase(_.deburr(_.toLower(params.name)));
38
- }
39
-
40
- const role = await strapi
41
- .query('plugins::users-permissions.role')
42
- .create({ data: _.omit(params, ['users', 'permissions']) });
43
-
44
- const arrayOfPromises = Object.keys(params.permissions || {}).reduce((acc, type) => {
45
- Object.keys(params.permissions[type].controllers).forEach(controller => {
46
- Object.keys(params.permissions[type].controllers[controller]).forEach(action => {
47
- acc.push(
48
- strapi.query('plugins::users-permissions.permission').create({
49
- data: {
50
- role: role.id,
51
- type,
52
- controller,
53
- action: action.toLowerCase(),
54
- ...params.permissions[type].controllers[controller][action],
55
- },
56
- })
57
- );
58
- });
59
- });
60
-
61
- return acc;
62
- }, []);
63
-
64
- // Use Content Manager business logic to handle relation.
65
- if (params.users && params.users.length > 0)
66
- arrayOfPromises.push(
67
- strapi.query('plugins::users-permissions.role').update({
68
- where: {
69
- id: role.id,
70
- },
71
- data: { users: params.users },
72
- })
73
- );
74
-
75
- return await Promise.all(arrayOfPromises);
76
- },
77
-
78
- async deleteRole(roleID, publicRoleID) {
79
- const role = await strapi
80
- .query('plugins::users-permissions.role')
81
- .findOne({ where: { id: roleID }, populate: ['users', 'permissions'] });
82
-
83
- if (!role) {
84
- throw new Error('Cannot find this role');
85
- }
86
-
87
- // Move users to guest role.
88
- const arrayOfPromises = role.users.reduce((acc, user) => {
89
- acc.push(
90
- strapi.query('plugins::users-permissions.user').update({
91
- where: {
92
- id: user.id,
93
- },
94
- data: {
95
- role: publicRoleID,
96
- },
97
- })
98
- );
99
-
100
- return acc;
101
- }, []);
102
-
103
- // Remove permissions related to this role.
104
- role.permissions.forEach(permission => {
105
- arrayOfPromises.push(
106
- strapi.query('plugins::users-permissions.permission').delete({
107
- where: { id: permission.id },
108
- })
109
- );
110
- });
111
-
112
- // Delete the role.
113
- arrayOfPromises.push(
114
- strapi.query('plugins::users-permissions.role').delete({ where: { id: roleID } })
115
- );
116
-
117
- return await Promise.all(arrayOfPromises);
118
- },
119
-
120
- getPlugins(lang = 'en') {
121
- return new Promise(resolve => {
122
- request(
123
- {
124
- uri: `https://marketplace.strapi.io/plugins?lang=${lang}`,
125
- json: true,
126
- timeout: 3000,
127
- headers: {
128
- 'cache-control': 'max-age=3600',
129
- },
130
- },
131
- (err, response, body) => {
132
- if (err || response.statusCode !== 200) {
133
- return resolve([]);
134
- }
135
-
136
- resolve(body);
137
- }
138
- );
139
- });
140
- },
141
-
142
- getActions() {
143
- const generateActions = data =>
144
- Object.keys(data).reduce((acc, key) => {
145
- if (_.isFunction(data[key])) {
146
- acc[key] = { enabled: false, policy: '' };
147
- }
148
-
149
- return acc;
150
- }, {});
151
-
152
- const appControllers = Object.keys(strapi.api || {})
153
- .filter(key => !!strapi.api[key].controllers)
154
- .reduce(
155
- (acc, key) => {
156
- Object.keys(strapi.api[key].controllers).forEach(controller => {
157
- acc.controllers[controller] = generateActions(strapi.api[key].controllers[controller]);
158
- });
159
-
160
- return acc;
161
- },
162
- { controllers: {} }
163
- );
164
-
165
- const pluginsPermissions = Object.keys(strapi.plugins).reduce((acc, key) => {
166
- const initialState = {
167
- controllers: {},
168
- };
169
-
170
- acc[key] = Object.keys(strapi.plugins[key].controllers).reduce((obj, k) => {
171
- obj.controllers[k] = generateActions(strapi.plugins[key].controllers[k]);
172
-
173
- return obj;
174
- }, initialState);
175
-
176
- return acc;
177
- }, {});
178
-
179
- const permissions = {
180
- application: {
181
- controllers: appControllers.controllers,
182
- },
183
- };
184
-
185
- return _.merge(permissions, pluginsPermissions);
186
- },
187
-
188
- async getRole(roleID, plugins) {
189
- const role = await strapi
190
- .query('plugins::users-permissions.role')
191
- .findOne({ where: { id: roleID }, populate: ['permissions'] });
192
-
193
- if (!role) {
194
- throw new Error('Cannot find this role');
195
- }
196
-
197
- // Group by `type`.
198
- const permissions = role.permissions.reduce((acc, permission) => {
199
- _.set(acc, `${permission.type}.controllers.${permission.controller}.${permission.action}`, {
200
- enabled: _.toNumber(permission.enabled) == true,
201
- policy: permission.policy,
202
- });
203
-
204
- if (permission.type !== 'application' && !acc[permission.type].information) {
205
- acc[permission.type].information =
206
- plugins.find(plugin => plugin.id === permission.type) || {};
207
- }
208
-
209
- return acc;
210
- }, {});
211
-
212
- return {
213
- ...role,
214
- permissions,
215
- };
216
- },
217
-
218
- async getRoles() {
219
- const roles = await strapi
220
- .query('plugins::users-permissions.role')
221
- .findMany({ sort: ['name'] });
222
-
223
- for (let i = 0; i < roles.length; ++i) {
224
- roles[i].nb_users = await strapi
225
- .query('plugins::users-permissions.user')
226
- .count({ where: { role: { id: roles[i].id } } });
227
- }
228
-
229
- return roles;
230
- },
231
-
232
- async getRoutes() {
233
- const routes = Object.keys(strapi.api || {}).reduce((acc, current) => {
234
- return acc.concat(_.get(strapi.api[current].config, 'routes', []));
235
- }, []);
236
- const clonedPlugins = _.cloneDeep(strapi.plugins);
237
- const pluginsRoutes = Object.keys(clonedPlugins || {}).reduce((acc, current) => {
238
- const routes = _.get(clonedPlugins, [current, 'config', 'routes'], []).reduce((acc, curr) => {
239
- const prefix = curr.config.prefix;
240
- const path = prefix !== undefined ? `${prefix}${curr.path}` : `/${current}${curr.path}`;
241
- _.set(curr, 'path', path);
242
-
243
- return acc.concat(curr);
244
- }, []);
245
-
246
- acc[current] = routes;
247
-
248
- return acc;
249
- }, {});
250
-
251
- return _.merge({ application: routes }, pluginsRoutes);
252
- },
253
-
254
- async updatePermissions() {
255
- const roles = await strapi.query('plugins::users-permissions.role').findMany();
256
-
257
- const rolesMap = _.keyBy(roles, 'id');
258
-
259
- const dbPermissions = await strapi
260
- .query('plugins::users-permissions.permission')
261
- .findMany({ populate: ['role'] });
262
-
263
- let permissionsFoundInDB = dbPermissions.map(permission => {
264
- const { type, controller, action, role } = permission;
265
- return `${type}.${controller}.${action}.${role.id}`;
266
- });
267
-
268
- permissionsFoundInDB = _.uniq(permissionsFoundInDB);
269
-
270
- // Aggregate first level actions.
271
- const appActions = Object.keys(strapi.api || {}).reduce((acc, api) => {
272
- Object.keys(_.get(strapi.api[api], 'controllers', {})).forEach(controller => {
273
- const actions = Object.keys(strapi.api[api].controllers[controller])
274
- .filter(action => _.isFunction(strapi.api[api].controllers[controller][action]))
275
- .map(action => `application.${controller}.${action.toLowerCase()}`);
276
-
277
- acc = acc.concat(actions);
278
- });
279
-
280
- return acc;
281
- }, []);
282
-
283
- // Aggregate plugins' actions.
284
- const pluginsActions = Object.keys(strapi.plugins).reduce((acc, plugin) => {
285
- Object.keys(strapi.plugins[plugin].controllers).forEach(controller => {
286
- const actions = Object.keys(strapi.plugins[plugin].controllers[controller])
287
- .filter(action => _.isFunction(strapi.plugins[plugin].controllers[controller][action]))
288
- .map(action => `${plugin}.${controller}.${action.toLowerCase()}`);
289
-
290
- acc = acc.concat(actions);
291
- });
292
-
293
- return acc;
294
- }, []);
295
-
296
- const actionsFoundInFiles = appActions.concat(pluginsActions);
297
-
298
- const permissionsFoundInFiles = [];
299
-
300
- for (const role of roles) {
301
- actionsFoundInFiles.forEach(action => {
302
- permissionsFoundInFiles.push(`${action}.${role.id}`);
303
- });
304
- }
305
-
306
- // Compare to know if actions have been added or removed from controllers.
307
- if (!_.isEqual(permissionsFoundInDB.sort(), permissionsFoundInFiles.sort())) {
308
- const splitted = str => {
309
- const [type, controller, action, roleId] = str.split('.');
310
-
311
- return { type, controller, action, roleId };
312
- };
313
-
314
- // We have to know the difference to add or remove the permissions entries in the database.
315
- const toRemove = _.difference(permissionsFoundInDB, permissionsFoundInFiles).map(splitted);
316
- const toAdd = _.difference(permissionsFoundInFiles, permissionsFoundInDB).map(splitted);
317
-
318
- const query = strapi.query('plugins::users-permissions.permission');
319
-
320
- // Execute request to update entries in database for each role.
321
- await Promise.all(
322
- toAdd.map(permission => {
323
- return query.create({
324
- data: {
325
- type: permission.type,
326
- controller: permission.controller,
327
- action: permission.action,
328
- enabled: isEnabledByDefault(permission, rolesMap[permission.roleId]),
329
- policy: '',
330
- role: permission.roleId,
331
- },
332
- });
333
- })
334
- );
335
-
336
- await Promise.all(
337
- toRemove.map(permission => {
338
- const { type, controller, action, roleId } = permission;
339
- return query.delete({ where: { type, controller, action, role: { id: roleId } } });
340
- })
341
- );
342
- }
343
- },
344
-
345
- async initialize() {
346
- const roleCount = await strapi.query('plugins::users-permissions.role').count();
347
-
348
- if (roleCount === 0) {
349
- await strapi.query('plugins::users-permissions.role').create({
350
- data: {
351
- name: 'Authenticated',
352
- description: 'Default role given to authenticated user.',
353
- type: 'authenticated',
354
- },
355
- });
356
-
357
- await strapi.query('plugins::users-permissions.role').create({
358
- data: {
359
- name: 'Public',
360
- description: 'Default role given to unauthenticated user.',
361
- type: 'public',
362
- },
363
- });
364
- }
365
-
366
- return getService('users-permissions').updatePermissions();
367
- },
368
-
369
- async updateRole(roleID, body) {
370
- const [role, authenticated] = await Promise.all([
371
- this.getRole(roleID, []),
372
- strapi.query('plugins::users-permissions.role').findOne({ where: { type: 'authenticated' } }),
373
- ]);
374
-
375
- await strapi.query('plugins::users-permissions.role').update({
376
- where: { id: roleID },
377
- data: _.pick(body, ['name', 'description']),
378
- });
379
-
380
- await Promise.all(
381
- Object.keys(body.permissions || {}).reduce((acc, type) => {
382
- Object.keys(body.permissions[type].controllers).forEach(controller => {
383
- Object.keys(body.permissions[type].controllers[controller]).forEach(action => {
384
- const bodyAction = body.permissions[type].controllers[controller][action];
385
- const currentAction = _.get(
386
- role.permissions,
387
- `${type}.controllers.${controller}.${action}`,
388
- {}
389
- );
390
-
391
- if (!_.isEqual(bodyAction, currentAction)) {
392
- acc.push(
393
- strapi.query('plugins::users-permissions.permission').update({
394
- where: {
395
- role: roleID,
396
- type,
397
- controller,
398
- action: action.toLowerCase(),
399
- },
400
- data: bodyAction,
401
- })
402
- );
403
- }
404
- });
405
- });
406
-
407
- return acc;
408
- }, [])
409
- );
410
-
411
- // Add user to this role.
412
- const newUsers = _.differenceBy(body.users, role.users, 'id');
413
- await Promise.all(newUsers.map(user => this.updateUserRole(user, roleID)));
414
-
415
- const oldUsers = _.differenceBy(role.users, body.users, 'id');
416
- await Promise.all(oldUsers.map(user => this.updateUserRole(user, authenticated.id)));
417
- },
418
-
419
- async updateUserRole(user, role) {
420
- return strapi
421
- .query('plugins::users-permissions.user')
422
- .update({ where: { id: user.id }, data: { role } });
423
- },
424
-
425
- template(layout, data) {
426
- const compiledObject = _.template(layout);
427
- return compiledObject(data);
428
- },
429
- };
package/utils/index.js DELETED
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- const { prop } = require('lodash/fp');
4
-
5
- const getService = name => {
6
- return prop(`users-permissions.services.${name}`, strapi.plugins);
7
- };
8
-
9
- module.exports = {
10
- getService,
11
- };