{"version":3,"file":"set-stages-roles.mjs","sources":["../../../server/src/migrations/set-stages-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 RBAC permissions for all roles.\n */\nasync function migrateReviewWorkflowStagesRoles({ oldContentTypes, contentTypes }: any) {\n  const hadRolePermissions = !!oldContentTypes?.[STAGE_MODEL_UID]?.attributes?.permissions;\n  const hasRolePermissions = !!contentTypes?.[STAGE_MODEL_UID]?.attributes?.permissions;\n\n  // If the stage content type did not have permissions in the previous version\n  // then we set the 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 RBAC.\n  if (!hadRolePermissions && hasRolePermissions) {\n    const roleUID = 'admin::role';\n    strapi.log.info(\n      `Migrating all existing review workflow stages to have 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 any;\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              fromStage: 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} migration for ${STAGE_MODEL_UID} with id ${stageId}. The stage does not have a numerical id.`\n        );\n        continue;\n      }\n\n      // Register the permissions for this stage\n      const stagePermissions = await stagePermissionsService.registerMany(permissions);\n\n      // Update the stage with its new permissions\n      await strapi.db.query(STAGE_MODEL_UID).update({\n        where: { id: numericalStageId },\n        data: {\n          permissions: stagePermissions.flat().map((permission: any) => permission.id),\n        },\n      });\n    }\n  }\n}\n\nexport default migrateReviewWorkflowStagesRoles;\n"],"names":["migrateReviewWorkflowStagesRoles","oldContentTypes","contentTypes","hadRolePermissions","STAGE_MODEL_UID","attributes","permissions","hasRolePermissions","roleUID","strapi","log","info","stagePermissionsService","getService","stages","db","query","findMany","roles","groupedPermissions","map","role","id","forEach","roleId","stage","stageId","push","fromStage","action","STAGE_TRANSITION_UID","Object","entries","numericalStageId","Number","isNaN","warn","stagePermissions","registerMany","update","where","data","flat","permission"],"mappings":";;;AAGA;;AAEC,IACD,eAAeA,gCAAAA,CAAiC,EAAEC,eAAe,EAAEC,YAAY,EAAO,EAAA;AACpF,IAAA,MAAMC,qBAAqB,CAAC,CAACF,kBAAkBG,eAAAA,CAAgB,EAAEC,UAAAA,EAAYC,WAAAA;AAC7E,IAAA,MAAMC,qBAAqB,CAAC,CAACL,eAAeE,eAAAA,CAAgB,EAAEC,UAAAA,EAAYC,WAAAA;;;;IAK1E,IAAI,CAACH,sBAAsBI,kBAAAA,EAAoB;AAC7C,QAAA,MAAMC,OAAAA,GAAU,aAAA;QAChBC,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,CAAC,+EAA+E,EAAEH,OAAAA,CAAQ,CAAC,CAAC,CAAA;AAG9F,QAAA,MAAMI,0BAA0BC,UAAAA,CAAW,mBAAA,CAAA;QAE3C,MAAMC,MAAAA,GAAS,MAAML,MAAAA,CAAOM,EAAE,CAACC,KAAK,CAACZ,iBAAiBa,QAAQ,EAAA;QAC9D,MAAMC,KAAAA,GAAQ,MAAMT,MAAAA,CAAOM,EAAE,CAACC,KAAK,CAACR,SAASS,QAAQ,EAAA;;AAGrD,QAAA,MAAME,qBAAqB,EAAC;QAC5BD,KAAAA,CACGE,GAAG,CAAC,CAACC,IAAAA,GAASA,KAAKC,EAAE,CAAA,CACrBC,OAAO,CAAC,CAACC,MAAAA,GAAAA;YACRV,MAAAA,CACGM,GAAG,CAAC,CAACK,KAAAA,GAAUA,MAAMH,EAAE,CAAA,CACvBC,OAAO,CAAC,CAACG,OAAAA,GAAAA;AACR,gBAAA,IAAI,CAACP,kBAAkB,CAACO,OAAAA,CAAQ,EAAE;oBAChCP,kBAAkB,CAACO,OAAAA,CAAQ,GAAG,EAAE;AAClC,gBAAA;AAEAP,gBAAAA,kBAAkB,CAACO,OAAAA,CAAQ,CAACC,IAAI,CAAC;AAC/BH,oBAAAA,MAAAA;oBACAI,SAAAA,EAAWF,OAAAA;oBACXG,MAAAA,EAAQC;AACV,iBAAA,CAAA;AACF,YAAA,CAAA,CAAA;AACJ,QAAA,CAAA,CAAA;QAEF,KAAK,MAAM,CAACJ,OAAAA,EAASpB,WAAAA,CAAY,IAAIyB,MAAAA,CAAOC,OAAO,CAACb,kBAAAA,CAAAA,CAAqB;AACvE,YAAA,MAAMc,mBAAmBC,MAAAA,CAAOR,OAAAA,CAAAA;YAEhC,IAAIQ,MAAAA,CAAOC,KAAK,CAACF,gBAAAA,CAAAA,EAAmB;AAClCxB,gBAAAA,MAAAA,CAAOC,GAAG,CAAC0B,IAAI,CACb,CAAC,gBAAgB,EAAE5B,OAAAA,CAAQ,eAAe,EAAEJ,eAAAA,CAAgB,SAAS,EAAEsB,OAAAA,CAAQ,yCAAyC,CAAC,CAAA;AAE3H,gBAAA;AACF,YAAA;;AAGA,YAAA,MAAMW,gBAAAA,GAAmB,MAAMzB,uBAAAA,CAAwB0B,YAAY,CAAChC,WAAAA,CAAAA;;AAGpE,YAAA,MAAMG,OAAOM,EAAE,CAACC,KAAK,CAACZ,eAAAA,CAAAA,CAAiBmC,MAAM,CAAC;gBAC5CC,KAAAA,EAAO;oBAAElB,EAAAA,EAAIW;AAAiB,iBAAA;gBAC9BQ,IAAAA,EAAM;oBACJnC,WAAAA,EAAa+B,gBAAAA,CAAiBK,IAAI,EAAA,CAAGtB,GAAG,CAAC,CAACuB,UAAAA,GAAoBA,WAAWrB,EAAE;AAC7E;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA;AACF;;;;"}