all repos — caroster @ b746a19206f96980300f3051822e27c9a156887f

[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};