{"version":3,"file":"role.mjs","sources":["../../../server/services/role.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { NotFoundError } = require('@strapi/utils').errors;\nconst { getService } = require('../utils');\n\nmodule.exports = ({ strapi }) => ({\n  async createRole(params) {\n    if (!params.type) {\n      params.type = _.snakeCase(_.deburr(_.toLower(params.name)));\n    }\n\n    const role = await strapi.db\n      .query('plugin::users-permissions.role')\n      .create({ data: _.omit(params, ['users', 'permissions']) });\n\n    const createPromises = _.flatMap(params.permissions, (type, typeName) => {\n      return _.flatMap(type.controllers, (controller, controllerName) => {\n        return _.reduce(\n          controller,\n          (acc, action, actionName) => {\n            const { enabled /* policy */ } = action;\n\n            if (enabled) {\n              const actionID = `${typeName}.${controllerName}.${actionName}`;\n\n              acc.push(\n                strapi.db\n                  .query('plugin::users-permissions.permission')\n                  .create({ data: { action: actionID, role: role.id } })\n              );\n            }\n\n            return acc;\n          },\n          []\n        );\n      });\n    });\n\n    await Promise.all(createPromises);\n  },\n\n  async findOne(roleID) {\n    const role = await strapi.db\n      .query('plugin::users-permissions.role')\n      .findOne({ where: { id: roleID }, populate: ['permissions'] });\n\n    if (!role) {\n      throw new NotFoundError('Role not found');\n    }\n\n    const allActions = getService('users-permissions').getActions();\n\n    // Group by `type`.\n    role.permissions.forEach((permission) => {\n      const [type, controller, action] = permission.action.split('.');\n\n      _.set(allActions, `${type}.controllers.${controller}.${action}`, {\n        enabled: true,\n        policy: '',\n      });\n    });\n\n    return {\n      ...role,\n      permissions: allActions,\n    };\n  },\n\n  async find() {\n    const roles = await strapi.db\n      .query('plugin::users-permissions.role')\n      .findMany({ sort: ['name'] });\n\n    for (const role of roles) {\n      role.nb_users = await strapi.db\n        .query('plugin::users-permissions.user')\n        .count({ where: { role: { id: role.id } } });\n    }\n\n    return roles;\n  },\n\n  async updateRole(roleID, data) {\n    const role = await strapi.db\n      .query('plugin::users-permissions.role')\n      .findOne({ where: { id: roleID }, populate: ['permissions'] });\n\n    if (!role) {\n      throw new NotFoundError('Role not found');\n    }\n\n    await strapi.db.query('plugin::users-permissions.role').update({\n      where: { id: roleID },\n      data: _.pick(data, ['name', 'description']),\n    });\n\n    const { permissions } = data;\n\n    const newActions = _.flatMap(permissions, (type, typeName) => {\n      return _.flatMap(type.controllers, (controller, controllerName) => {\n        return _.reduce(\n          controller,\n          (acc, action, actionName) => {\n            const { enabled /* policy */ } = action;\n\n            if (enabled) {\n              acc.push(`${typeName}.${controllerName}.${actionName}`);\n            }\n\n            return acc;\n          },\n          []\n        );\n      });\n    });\n\n    const oldActions = role.permissions.map(({ action }) => action);\n\n    const toDelete = role.permissions.reduce((acc, permission) => {\n      if (!newActions.includes(permission.action)) {\n        acc.push(permission);\n      }\n      return acc;\n    }, []);\n\n    const toCreate = newActions\n      .filter((action) => !oldActions.includes(action))\n      .map((action) => ({ action, role: role.id }));\n\n    await Promise.all(\n      toDelete.map((permission) =>\n        strapi.db\n          .query('plugin::users-permissions.permission')\n          .delete({ where: { id: permission.id } })\n      )\n    );\n\n    await Promise.all(\n      toCreate.map((permissionInfo) =>\n        strapi.db.query('plugin::users-permissions.permission').create({ data: permissionInfo })\n      )\n    );\n  },\n\n  async deleteRole(roleID, publicRoleID) {\n    const role = await strapi.db\n      .query('plugin::users-permissions.role')\n      .findOne({ where: { id: roleID }, populate: ['users', 'permissions'] });\n\n    if (!role) {\n      throw new NotFoundError('Role not found');\n    }\n\n    // Move users to guest role.\n    await Promise.all(\n      role.users.map((user) => {\n        return strapi.db.query('plugin::users-permissions.user').update({\n          where: { id: user.id },\n          data: { role: publicRoleID },\n        });\n      })\n    );\n\n    // Remove permissions related to this role.\n    // TODO: use delete many\n    await Promise.all(\n      role.permissions.map((permission) => {\n        return strapi.db.query('plugin::users-permissions.permission').delete({\n          where: { id: permission.id },\n        });\n      })\n    );\n\n    // Delete the role.\n    await strapi.db.query('plugin::users-permissions.role').delete({ where: { id: roleID } });\n  },\n});\n"],"names":["_","require$$0","NotFoundError","require$$1","errors","getService","require$$2","role","strapi","createRole","params","type","snakeCase","deburr","toLower","name","db","query","create","data","omit","createPromises","flatMap","permissions","typeName","controllers","controller","controllerName","reduce","acc","action","actionName","enabled","actionID","push","id","Promise","all","findOne","roleID","where","populate","allActions","getActions","forEach","permission","split","set","policy","find","roles","findMany","sort","nb_users","count","updateRole","update","pick","newActions","oldActions","map","toDelete","includes","toCreate","filter","delete","permissionInfo","deleteRole","publicRoleID","users","user"],"mappings":"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"}