{"version":3,"file":"actions.mjs","sources":["../../../../server/src/services/permissions/actions.ts"],"sourcesContent":["import { isArray, getOr, prop } from 'lodash/fp';\nimport { getService } from '../../utils';\n\nconst actions = [\n  {\n    section: 'settings',\n    category: 'Internationalization',\n    subCategory: 'Locales',\n    pluginName: 'i18n',\n    displayName: 'Create',\n    uid: 'locale.create',\n  },\n  {\n    section: 'settings',\n    category: 'Internationalization',\n    subCategory: 'Locales',\n    pluginName: 'i18n',\n    displayName: 'Read',\n    uid: 'locale.read',\n    aliases: [\n      { actionId: 'plugin::content-manager.explorer.read', subjects: ['plugin::i18n.locale'] },\n    ],\n  },\n  {\n    section: 'settings',\n    category: 'Internationalization',\n    subCategory: 'Locales',\n    pluginName: 'i18n',\n    displayName: 'Update',\n    uid: 'locale.update',\n  },\n  {\n    section: 'settings',\n    category: 'Internationalization',\n    subCategory: 'Locales',\n    pluginName: 'i18n',\n    displayName: 'Delete',\n    uid: 'locale.delete',\n  },\n];\n\nconst addLocalesPropertyIfNeeded = ({ value: action }: any) => {\n  const {\n    section,\n    options: { applyToProperties },\n  } = action;\n\n  // Only add the locales property to contentTypes' actions\n  if (section !== 'contentTypes') {\n    return;\n  }\n\n  // If the 'locales' property is already declared within the applyToProperties array, then ignore the next steps\n  if (isArray(applyToProperties) && applyToProperties.includes('locales')) {\n    return;\n  }\n\n  // Add the 'locales' property to the applyToProperties array (create it if necessary)\n  action.options.applyToProperties = isArray(applyToProperties)\n    ? applyToProperties.concat('locales')\n    : ['locales'];\n};\n\nconst shouldApplyLocalesPropertyToSubject = ({ property, subject }: any) => {\n  if (property === 'locales') {\n    const model = strapi.getModel(subject);\n\n    return getService('content-types').isLocalizedContentType(model);\n  }\n\n  return true;\n};\n\nconst addAllLocalesToPermissions = async (permissions: any) => {\n  const { actionProvider } = strapi.service('admin::permission');\n  const { find: findAllLocales } = getService('locales');\n\n  const allLocales = await findAllLocales();\n  const allLocalesCode = allLocales.map(prop('code'));\n\n  return Promise.all(\n    permissions.map(async (permission: any) => {\n      const { action, subject } = permission;\n\n      const appliesToLocalesProperty = await actionProvider.appliesToProperty(\n        'locales',\n        action,\n        subject\n      );\n\n      if (!appliesToLocalesProperty) {\n        return permission;\n      }\n\n      const oldPermissionProperties = getOr({}, 'properties', permission);\n\n      return { ...permission, properties: { ...oldPermissionProperties, locales: allLocalesCode } };\n    })\n  );\n};\n\n/**\n * `properties.locales === null` means access to all locales (see engine handler) — do not patch.\n */\nconst needsLocalesPatch = (properties: Record<string, unknown> = {}) => {\n  if (!('locales' in properties)) {\n    return true;\n  }\n\n  const { locales } = properties;\n\n  if (locales === null) {\n    return false;\n  }\n\n  return Array.isArray(locales) && locales.length === 0;\n};\n\nconst normalizeRolePermissionsLocales = async (permissions: any[]): Promise<any[]> => {\n  const { isLocalizedContentType } = getService('content-types');\n  const { actionProvider } = strapi.service('admin::permission');\n  const defaultLocale = await getService('locales').getDefaultLocale();\n\n  return Promise.all(\n    permissions.map(async (permission) => {\n      const { subject, action, properties = {} } = permission;\n\n      if (!subject) {\n        return permission;\n      }\n\n      const model = strapi.getModel(subject);\n\n      if (!model || !isLocalizedContentType(model)) {\n        return permission;\n      }\n\n      const appliesToLocales = await actionProvider.appliesToProperty('locales', action, subject);\n\n      if (!appliesToLocales) {\n        return permission;\n      }\n\n      // null means access to all locales — same semantics as the permission engine handler\n      if (properties.locales === null) {\n        return permission;\n      }\n\n      if (needsLocalesPatch(properties) && defaultLocale) {\n        return { ...permission, properties: { ...properties, locales: [defaultLocale] } };\n      }\n\n      return permission;\n    })\n  );\n};\n\n/**\n * Repairs role permissions on content types that just had i18n enabled in this sync.\n * Only patches permissions where `properties.locales` is missing or `[]`; leaves `null` alone.\n * Safe to run at `afterSync` time because it does not depend on the actionProvider.\n */\nconst repairPermissionsForNewlyLocalizedTypes = async ({\n  oldContentTypes,\n  contentTypes,\n}: {\n  oldContentTypes: Record<string, any> | null | undefined;\n  contentTypes: Record<string, any>;\n}) => {\n  if (!oldContentTypes) {\n    return;\n  }\n\n  const { isLocalizedContentType } = getService('content-types');\n\n  const newlyLocalizedUids = Object.keys(contentTypes).filter(\n    (uid) =>\n      oldContentTypes[uid] &&\n      !isLocalizedContentType(oldContentTypes[uid]) &&\n      isLocalizedContentType(contentTypes[uid])\n  );\n\n  if (newlyLocalizedUids.length === 0) {\n    return;\n  }\n\n  try {\n    const defaultLocaleCode = await getService('locales').getDefaultLocale();\n    if (!defaultLocaleCode) {\n      return;\n    }\n\n    const permissionService = strapi.service('admin::permission');\n    const allPermissions = await permissionService.findMany({\n      where: { subject: { $in: newlyLocalizedUids } },\n    });\n\n    const results = await Promise.allSettled(\n      allPermissions\n        .filter((permission: any) => needsLocalesPatch(permission.properties))\n        .map((permission: any) =>\n          strapi.db.query('admin::permission').update({\n            where: { id: permission.id },\n            data: {\n              properties: { ...permission.properties, locales: [defaultLocaleCode] },\n            },\n          })\n        )\n    );\n\n    results\n      .filter((r): r is PromiseRejectedResult => r.status === 'rejected')\n      .forEach((r) =>\n        strapi.log.error(\n          'Failed to patch i18n permission during newly-localized type repair.',\n          r.reason\n        )\n      );\n  } catch (error) {\n    strapi.log.error('Failed to repair i18n permissions for newly localized content types.', error);\n  }\n};\n\nconst syncSuperAdminPermissionsWithLocales = async () => {\n  const roleService = strapi.service('admin::role');\n  const permissionService = strapi.service('admin::permission');\n\n  const superAdminRole = await roleService.getSuperAdmin();\n\n  if (!superAdminRole) {\n    return;\n  }\n\n  const superAdminPermissions = await permissionService.findMany({\n    where: {\n      role: {\n        id: superAdminRole.id,\n      },\n    },\n  });\n\n  const newSuperAdminPermissions = await addAllLocalesToPermissions(superAdminPermissions);\n\n  await roleService.assignPermissions(superAdminRole.id, newSuperAdminPermissions);\n};\n\nconst registerI18nActions = async () => {\n  const { actionProvider } = strapi.service('admin::permission');\n\n  await actionProvider.registerMany(actions);\n};\n\nconst registerI18nActionsHooks = () => {\n  const { actionProvider } = strapi.service('admin::permission');\n  const { hooks } = strapi.service('admin::role');\n\n  actionProvider.hooks.appliesPropertyToSubject.register(shouldApplyLocalesPropertyToSubject);\n  hooks.willResetSuperAdminPermissions.register(addAllLocalesToPermissions);\n  hooks.willValidateUpdatePermissions.register(normalizeRolePermissionsLocales);\n};\n\nconst updateActionsProperties = () => {\n  const { actionProvider } = strapi.service('admin::permission');\n\n  // Register the transformation for every new action\n  actionProvider.hooks.willRegister.register(addLocalesPropertyIfNeeded);\n\n  // Handle already registered actions\n  actionProvider.values().forEach((action: any) => addLocalesPropertyIfNeeded({ value: action }));\n};\n\nexport default {\n  actions,\n  registerI18nActions,\n  registerI18nActionsHooks,\n  updateActionsProperties,\n  syncSuperAdminPermissionsWithLocales,\n  repairPermissionsForNewlyLocalizedTypes,\n  normalizeRolePermissionsLocales,\n};\n"],"names":["actions","section","category","subCategory","pluginName","displayName","uid","aliases","actionId","subjects","addLocalesPropertyIfNeeded","value","action","options","applyToProperties","isArray","includes","concat","shouldApplyLocalesPropertyToSubject","property","subject","model","strapi","getModel","getService","isLocalizedContentType","addAllLocalesToPermissions","permissions","actionProvider","service","find","findAllLocales","allLocales","allLocalesCode","map","prop","Promise","all","permission","appliesToLocalesProperty","appliesToProperty","oldPermissionProperties","getOr","properties","locales","needsLocalesPatch","Array","length","normalizeRolePermissionsLocales","defaultLocale","getDefaultLocale","appliesToLocales","repairPermissionsForNewlyLocalizedTypes","oldContentTypes","contentTypes","newlyLocalizedUids","Object","keys","filter","defaultLocaleCode","permissionService","allPermissions","findMany","where","$in","results","allSettled","db","query","update","id","data","r","status","forEach","log","error","reason","syncSuperAdminPermissionsWithLocales","roleService","superAdminRole","getSuperAdmin","superAdminPermissions","role","newSuperAdminPermissions","assignPermissions","registerI18nActions","registerMany","registerI18nActionsHooks","hooks","appliesPropertyToSubject","register","willResetSuperAdminPermissions","willValidateUpdatePermissions","updateActionsProperties","willRegister","values"],"mappings":"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"}