{"version":3,"file":"setup-stage-transfer-to-roles.mjs","sources":["../../../server/src/migrations/setup-stage-transfer-to-roles.ts"],"sourcesContent":["import { STAGE_TRANSITION_UID, STAGE_MODEL_UID } from '../constants/workflows';\nimport { getService } from '../utils';\n\n/**\n * Migrate review workflow stages to have \"to\" RBAC permissions for all roles.\n */\nasync function migrateReviewWorkflowStagesTransferToRoles({ oldContentTypes, contentTypes }: any) {\n  const hadToPermissions = !!oldContentTypes?.[STAGE_MODEL_UID]?.attributes?.toPermissions;\n  const hasToPermissions = !!contentTypes?.[STAGE_MODEL_UID]?.attributes?.toPermissions;\n\n  // If the stage content type did not have toPermissions in the previous version\n  // then we set the \"to\" permissions of every stage to be every current role in the app.\n  // This ensures consistent behaviour when upgrading to a strapi version with review workflows \"to\" RBAC.\n  if (!hadToPermissions && hasToPermissions) {\n    const roleUID = 'admin::role';\n    strapi.log.info(\n      `Migrating all existing review workflow stages to have \"to\" RBAC permissions for all ${roleUID}.`\n    );\n\n    const stagePermissionsService = getService('stage-permissions');\n\n    const stages = await strapi.db.query(STAGE_MODEL_UID).findMany();\n    const roles = await strapi.db.query(roleUID).findMany();\n\n    // Collect the permissions to add and group them by stage id.\n    const groupedPermissions = {} as Record<\n      number,\n      { roleId: number; toStage: number; action: string }[]\n    >;\n    roles\n      .map((role) => role.id)\n      .forEach((roleId) => {\n        stages\n          .map((stage) => stage.id)\n          .forEach((stageId) => {\n            if (!groupedPermissions[stageId]) {\n              groupedPermissions[stageId] = [];\n            }\n\n            groupedPermissions[stageId].push({\n              roleId,\n              toStage: stageId,\n              action: STAGE_TRANSITION_UID,\n            });\n          });\n      });\n\n    for (const [stageId, permissions] of Object.entries(groupedPermissions)) {\n      const numericalStageId = Number(stageId);\n\n      if (Number.isNaN(numericalStageId)) {\n        strapi.log.warn(\n          `Unable to apply ${roleUID} \"to\" migration for ${STAGE_MODEL_UID} with id ${stageId}. The stage does not have a numerical id.`\n        );\n        continue;\n      }\n\n      // Register the \"to\" permissions for this stage\n      const stageToPermissions = await stagePermissionsService.registerManyTo(permissions);\n\n      // Read existing permissions so we don't overwrite \"from\" permissions\n      const existingStage = await strapi.db.query(STAGE_MODEL_UID).findOne({\n        where: { id: numericalStageId },\n        populate: { permissions: true },\n      });\n\n      const existingPermissionIds = (existingStage?.permissions || []).map(\n        (p: { id: number }) => p.id\n      );\n      const newPermissionIds = stageToPermissions\n        .flat()\n        .map((permission: { id: number }) => permission.id);\n\n      // Update the stage with merged permissions (existing \"from\" + new \"to\")\n      await strapi.db.query(STAGE_MODEL_UID).update({\n        where: { id: numericalStageId },\n        data: {\n          permissions: [...existingPermissionIds, ...newPermissionIds],\n        },\n      });\n    }\n  }\n}\n\nexport default migrateReviewWorkflowStagesTransferToRoles;\n"],"names":["migrateReviewWorkflowStagesTransferToRoles","oldContentTypes","contentTypes","hadToPermissions","STAGE_MODEL_UID","attributes","toPermissions","hasToPermissions","roleUID","strapi","log","info","stagePermissionsService","getService","stages","db","query","findMany","roles","groupedPermissions","map","role","id","forEach","roleId","stage","stageId","push","toStage","action","STAGE_TRANSITION_UID","permissions","Object","entries","numericalStageId","Number","isNaN","warn","stageToPermissions","registerManyTo","existingStage","findOne","where","populate","existingPermissionIds","p","newPermissionIds","flat","permission","update","data"],"mappings":"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"}