all repos — caroster @ 1a6ce1a79d3fd263a4f1172079f35a969ed60d2e

[Octree] Group carpool to your event https://caroster.io

config/functions/bootstrap.js (view raw)

 1'use strict';
 2
 3const permissions = require('../permissions.json');
 4
 5/**
 6 * An asynchronous bootstrap function that runs before
 7 * your application gets started.
 8 *
 9 * This gives you an opportunity to set up your data model,
10 * run jobs, or perform some special logic.
11 *
12 * See more details here: https://strapi.io/documentation/v3.x/concepts/configurations.html#bootstrap
13 */
14
15module.exports = async () => {
16  /**
17   * Set permissions
18   */
19
20  // For each role, set permissions
21  const roles = Object.keys(permissions.roles);
22  await Promise.all(
23    roles.map(async roleType => {
24      // Get role entity in Strapi db
25      const role = await strapi.query('role', 'users-permissions').findOne({
26        type: roleType,
27      });
28      // If role doesn't exist, skip
29      if (!role) return [];
30
31      // Enable or create permissions for each roles, controllers and actions
32      const perms = permissions.roles[roleType];
33      return perms.map(({type, controllers}) =>
34        controllers.map(({name: controller, actions}) =>
35          actions.map(async action => {
36            const existingPerm = await strapi
37              .query('permission', 'users-permissions')
38              .findOne({
39                role: role.id,
40                type,
41                controller,
42                action,
43              });
44            if (existingPerm) {
45              if (existingPerm.enabled) return false; // If permission already enabled, skip
46              strapi.log.info(
47                `Enable permission ${type}.${controller}.${action} for role ${roleType}.`
48              );
49              return strapi
50                .query('permission', 'users-permissions')
51                .update(
52                  {role: role.id, type, controller, action},
53                  {enabled: true}
54                );
55            } else {
56              strapi.log.info(
57                `Create permission ${type}.${controller}.${action} for role ${roleType}.`
58              );
59              return strapi.query('permission', 'users-permissions').create({
60                role: role.id,
61                type,
62                controller,
63                action,
64                enabled: true,
65              });
66            }
67          })
68        )
69      );
70    })
71  );
72};