{"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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"}