@strapi/admin 5.50.2 → 5.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +14 -6
  2. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  3. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +14 -6
  4. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  5. package/dist/admin/admin/src/utils/cookies.js +77 -2
  6. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  7. package/dist/admin/admin/src/utils/cookies.mjs +76 -3
  8. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  9. package/dist/admin/shared/utils/auth-cookie-domain.js +41 -0
  10. package/dist/admin/shared/utils/auth-cookie-domain.js.map +1 -0
  11. package/dist/admin/shared/utils/auth-cookie-domain.mjs +38 -0
  12. package/dist/admin/shared/utils/auth-cookie-domain.mjs.map +1 -0
  13. package/dist/admin/shared/utils/auth-cookie-name.js +2 -2
  14. package/dist/admin/shared/utils/auth-cookie-name.js.map +1 -1
  15. package/dist/admin/shared/utils/auth-cookie-name.mjs +2 -2
  16. package/dist/admin/shared/utils/auth-cookie-name.mjs.map +1 -1
  17. package/dist/admin/shared/utils/auth-cookie-path.js +39 -0
  18. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -0
  19. package/dist/admin/shared/utils/auth-cookie-path.mjs +36 -0
  20. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -0
  21. package/dist/admin/src/utils/cookies.d.ts +21 -0
  22. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  23. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  24. package/dist/ee/server/src/services/auth.d.ts.map +1 -1
  25. package/dist/ee/server/src/services/user.d.ts.map +1 -1
  26. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  27. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  28. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +9 -3
  29. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  30. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +10 -4
  31. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  32. package/dist/server/ee/server/src/services/auth.js +5 -5
  33. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  34. package/dist/server/ee/server/src/services/auth.mjs +5 -5
  35. package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
  36. package/dist/server/ee/server/src/services/user.js +1 -0
  37. package/dist/server/ee/server/src/services/user.js.map +1 -1
  38. package/dist/server/ee/server/src/services/user.mjs +1 -0
  39. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  40. package/dist/server/server/src/content-types/User.js +6 -0
  41. package/dist/server/server/src/content-types/User.js.map +1 -1
  42. package/dist/server/server/src/content-types/User.mjs +6 -0
  43. package/dist/server/server/src/content-types/User.mjs.map +1 -1
  44. package/dist/server/server/src/controllers/authentication.js +12 -10
  45. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  46. package/dist/server/server/src/controllers/authentication.mjs +10 -8
  47. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  48. package/dist/server/server/src/routes/serve-admin-panel.js +17 -4
  49. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  50. package/dist/server/server/src/routes/serve-admin-panel.mjs +17 -4
  51. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  52. package/dist/server/server/src/services/auth.js +51 -6
  53. package/dist/server/server/src/services/auth.js.map +1 -1
  54. package/dist/server/server/src/services/auth.mjs +46 -6
  55. package/dist/server/server/src/services/auth.mjs.map +1 -1
  56. package/dist/server/server/src/services/index.js +1 -1
  57. package/dist/server/server/src/services/index.js.map +1 -1
  58. package/dist/server/server/src/services/user.js +1 -0
  59. package/dist/server/server/src/services/user.js.map +1 -1
  60. package/dist/server/server/src/services/user.mjs +1 -0
  61. package/dist/server/server/src/services/user.mjs.map +1 -1
  62. package/dist/server/shared/utils/auth-cookie-domain.js +41 -0
  63. package/dist/server/shared/utils/auth-cookie-domain.js.map +1 -0
  64. package/dist/server/shared/utils/auth-cookie-domain.mjs +38 -0
  65. package/dist/server/shared/utils/auth-cookie-domain.mjs.map +1 -0
  66. package/dist/server/shared/utils/auth-cookie-name.js +2 -2
  67. package/dist/server/shared/utils/auth-cookie-name.js.map +1 -1
  68. package/dist/server/shared/utils/auth-cookie-name.mjs +2 -2
  69. package/dist/server/shared/utils/auth-cookie-name.mjs.map +1 -1
  70. package/dist/server/shared/utils/auth-cookie-path.js +39 -0
  71. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -0
  72. package/dist/server/shared/utils/auth-cookie-path.mjs +36 -0
  73. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -0
  74. package/dist/server/shared/utils/session-auth.js +54 -3
  75. package/dist/server/shared/utils/session-auth.js.map +1 -1
  76. package/dist/server/shared/utils/session-auth.mjs +51 -4
  77. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  78. package/dist/server/src/content-types/User.d.ts +6 -0
  79. package/dist/server/src/content-types/User.d.ts.map +1 -1
  80. package/dist/server/src/content-types/index.d.ts +6 -0
  81. package/dist/server/src/content-types/index.d.ts.map +1 -1
  82. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  83. package/dist/server/src/domain/user.d.ts +1 -0
  84. package/dist/server/src/domain/user.d.ts.map +1 -1
  85. package/dist/server/src/index.d.ts +6 -0
  86. package/dist/server/src/index.d.ts.map +1 -1
  87. package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
  88. package/dist/server/src/services/auth.d.ts +18 -0
  89. package/dist/server/src/services/auth.d.ts.map +1 -1
  90. package/dist/server/src/services/index.d.ts.map +1 -1
  91. package/dist/server/src/services/user.d.ts.map +1 -1
  92. package/dist/shared/contracts/shared.d.ts +2 -1
  93. package/dist/shared/contracts/shared.d.ts.map +1 -1
  94. package/dist/shared/utils/__tests__/auth-cookie-domain.test.d.ts +1 -0
  95. package/dist/shared/utils/__tests__/auth-cookie-domain.test.d.ts.map +1 -0
  96. package/dist/shared/utils/__tests__/auth-cookie-path.test.d.ts +1 -0
  97. package/dist/shared/utils/__tests__/auth-cookie-path.test.d.ts.map +1 -0
  98. package/dist/shared/utils/auth-cookie-domain.d.ts +21 -0
  99. package/dist/shared/utils/auth-cookie-domain.d.ts.map +1 -0
  100. package/dist/shared/utils/auth-cookie-name.d.ts +1 -1
  101. package/dist/shared/utils/auth-cookie-name.d.ts.map +1 -1
  102. package/dist/shared/utils/auth-cookie-path.d.ts +17 -0
  103. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -0
  104. package/dist/shared/utils/session-auth.d.ts +15 -0
  105. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  106. package/package.json +8 -8
@@ -475,19 +475,27 @@ const inheritConditionsAtPath = (data, pathToActionObject, actionId, subject, us
475
475
  ];
476
476
  let nextModifiedDataState = cloneDeep__default.default(state.modifiedData);
477
477
  const oldValues = get__default.default(nextModifiedDataState, pathToValue, {});
478
+ const root = pathToValue[0];
479
+ // Plugin & setting permissions are stored with `subject: null` and their real
480
+ // action id is the full `plugin::`/`admin::` leaf segment (not the UI subcategory).
481
+ // For those, let the checker derive the action from each leaf path (subject stays null).
482
+ const isPluginOrSetting = root === 'plugins' || root === 'settings';
478
483
  let actionId;
479
484
  let subject;
480
- if (pathToValue.length >= 2) {
481
- subject = pathToValue[1];
482
- }
483
- if (pathToValue.length >= 3) {
484
- actionId = pathToValue[2];
485
+ if (isPluginOrSetting) {
486
+ subject = null;
487
+ } else {
488
+ if (pathToValue.length >= 2) {
489
+ subject = pathToValue[1];
490
+ }
491
+ if (pathToValue.length >= 3) {
492
+ actionId = pathToValue[2];
493
+ }
485
494
  }
486
495
  const permissionChecker = createPermissionChecker.createDynamicActionPermissionChecker(subject, actionId, userPermissions);
487
496
  const updatedValues = updateValues.updateValuesWithPermissions(oldValues, value, permissionChecker);
488
497
  // In App Token context, when enabling, inherit conditions from the user's permissions.
489
498
  if (value === true && userPermissions !== undefined) {
490
- const root = pathToValue[0];
491
499
  const subjectForLookup = root === 'collectionTypes' || root === 'singleTypes' ? subject ?? null : null;
492
500
  if (actionId !== undefined && subjectForLookup !== null) {
493
501
  inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);
@@ -1 +1 @@
1
- {"version":3,"file":"Permissions.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport {\n ConditionForm,\n Form,\n PropertyChildForm,\n createDefaultCTForm,\n createDefaultForm,\n} from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { hasLocaleValidationErrors } from '../utils/localePermissionValidation';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n hasLocaleValidationErrors: () => boolean;\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n onLocaleValidationChange?: (hasErrors: boolean) => void;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n (\n { layout, isFormDisabled, onLocaleValidationChange, permissions = [], userPermissions },\n api\n ) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n onLocaleValidationChange?.(hasLocaleValidationErrors(modifiedData));\n }, [modifiedData, onLocaleValidationChange]);\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n const permissionsToSend = formatPermissionsForAPI(modifiedData).map((perm) =>\n restoreNullLocalesIfUnchanged(perm, permissions, initialData, modifiedData)\n );\n\n return { permissionsToSend, didUpdateConditions };\n },\n hasLocaleValidationErrors() {\n return hasLocaleValidationErrors(modifiedData);\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n let actionId: string | undefined;\n let subject: string | undefined;\n\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const root = pathToValue[0];\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * restoreNullLocalesIfUnchanged\n * Extracted at module level to avoid nesting arrow functions more than 4 levels deep inside\n * the useImperativeHandle → getPermissions → map chain.\n * -----------------------------------------------------------------------------------------------*/\n\ntype SentPermission = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;\n\nconst restoreNullLocalesIfUnchanged = (\n perm: SentPermission,\n originalPermissions: Permission[],\n initialData: PermissionForms,\n modifiedData: PermissionForms\n): SentPermission => {\n if (!perm.subject) return perm;\n\n const original = originalPermissions.find(\n (p) => p.action === perm.action && p.subject === perm.subject\n );\n\n // null means \"all locales\" in legacy DBs — preserve it if the user hasn't changed anything\n if (original?.properties?.locales !== null) return perm;\n\n const kind =\n perm.subject in modifiedData.collectionTypes\n ? ('collectionTypes' as const)\n : perm.subject in modifiedData.singleTypes\n ? ('singleTypes' as const)\n : null;\n if (!kind) return perm;\n\n const initialActionForm = initialData[kind]?.[perm.subject]?.[perm.action];\n const modifiedActionForm = modifiedData[kind]?.[perm.subject]?.[perm.action];\n\n if (!initialActionForm || !modifiedActionForm) return perm;\n\n const initialLocaleEntry = (initialActionForm.properties as PropertyChildForm)['locales'];\n const modifiedLocaleEntry = (modifiedActionForm.properties as PropertyChildForm)['locales'];\n\n if (\n !initialLocaleEntry ||\n typeof initialLocaleEntry === 'boolean' ||\n !modifiedLocaleEntry ||\n typeof modifiedLocaleEntry === 'boolean'\n ) {\n return perm;\n }\n\n const localesUnchanged =\n Object.keys(initialLocaleEntry).length === Object.keys(modifiedLocaleEntry).length &&\n Object.entries(initialLocaleEntry).every(\n ([locale, val]) => modifiedLocaleEntry[locale] === val\n );\n\n if (!localesUnchanged) return perm;\n\n return { ...perm, properties: { ...perm.properties, locales: null } };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","onLocaleValidationChange","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useEffect","hasLocaleValidationErrors","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","map","perm","restoreNullLocalesIfUnchanged","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","originalPermissions","original","p","locales","initialActionForm","modifiedActionForm","initialLocaleEntry","modifiedLocaleEntry","localesUnchanged","every","locale","val","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
1
+ {"version":3,"file":"Permissions.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport {\n ConditionForm,\n Form,\n PropertyChildForm,\n createDefaultCTForm,\n createDefaultForm,\n} from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { hasLocaleValidationErrors } from '../utils/localePermissionValidation';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n hasLocaleValidationErrors: () => boolean;\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n onLocaleValidationChange?: (hasErrors: boolean) => void;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n (\n { layout, isFormDisabled, onLocaleValidationChange, permissions = [], userPermissions },\n api\n ) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n onLocaleValidationChange?.(hasLocaleValidationErrors(modifiedData));\n }, [modifiedData, onLocaleValidationChange]);\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n const permissionsToSend = formatPermissionsForAPI(modifiedData).map((perm) =>\n restoreNullLocalesIfUnchanged(perm, permissions, initialData, modifiedData)\n );\n\n return { permissionsToSend, didUpdateConditions };\n },\n hasLocaleValidationErrors() {\n return hasLocaleValidationErrors(modifiedData);\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const root = pathToValue[0];\n // Plugin & setting permissions are stored with `subject: null` and their real\n // action id is the full `plugin::`/`admin::` leaf segment (not the UI subcategory).\n // For those, let the checker derive the action from each leaf path (subject stays null).\n const isPluginOrSetting = root === 'plugins' || root === 'settings';\n\n let actionId: string | undefined;\n let subject: string | null | undefined;\n\n if (isPluginOrSetting) {\n subject = null;\n } else {\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * restoreNullLocalesIfUnchanged\n * Extracted at module level to avoid nesting arrow functions more than 4 levels deep inside\n * the useImperativeHandle → getPermissions → map chain.\n * -----------------------------------------------------------------------------------------------*/\n\ntype SentPermission = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;\n\nconst restoreNullLocalesIfUnchanged = (\n perm: SentPermission,\n originalPermissions: Permission[],\n initialData: PermissionForms,\n modifiedData: PermissionForms\n): SentPermission => {\n if (!perm.subject) return perm;\n\n const original = originalPermissions.find(\n (p) => p.action === perm.action && p.subject === perm.subject\n );\n\n // null means \"all locales\" in legacy DBs — preserve it if the user hasn't changed anything\n if (original?.properties?.locales !== null) return perm;\n\n const kind =\n perm.subject in modifiedData.collectionTypes\n ? ('collectionTypes' as const)\n : perm.subject in modifiedData.singleTypes\n ? ('singleTypes' as const)\n : null;\n if (!kind) return perm;\n\n const initialActionForm = initialData[kind]?.[perm.subject]?.[perm.action];\n const modifiedActionForm = modifiedData[kind]?.[perm.subject]?.[perm.action];\n\n if (!initialActionForm || !modifiedActionForm) return perm;\n\n const initialLocaleEntry = (initialActionForm.properties as PropertyChildForm)['locales'];\n const modifiedLocaleEntry = (modifiedActionForm.properties as PropertyChildForm)['locales'];\n\n if (\n !initialLocaleEntry ||\n typeof initialLocaleEntry === 'boolean' ||\n !modifiedLocaleEntry ||\n typeof modifiedLocaleEntry === 'boolean'\n ) {\n return perm;\n }\n\n const localesUnchanged =\n Object.keys(initialLocaleEntry).length === Object.keys(modifiedLocaleEntry).length &&\n Object.entries(initialLocaleEntry).every(\n ([locale, val]) => modifiedLocaleEntry[locale] === val\n );\n\n if (!localesUnchanged) return perm;\n\n return { ...perm, properties: { ...perm.properties, locales: null } };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","onLocaleValidationChange","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useEffect","hasLocaleValidationErrors","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","map","perm","restoreNullLocalesIfUnchanged","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","isPluginOrSetting","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","originalPermissions","original","p","locales","initialActionForm","modifiedActionForm","initialLocaleEntry","modifiedLocaleEntry","localesUnchanged","every","locale","val","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
@@ -446,19 +446,27 @@ const inheritConditionsAtPath = (data, pathToActionObject, actionId, subject, us
446
446
  ];
447
447
  let nextModifiedDataState = cloneDeep(state.modifiedData);
448
448
  const oldValues = get(nextModifiedDataState, pathToValue, {});
449
+ const root = pathToValue[0];
450
+ // Plugin & setting permissions are stored with `subject: null` and their real
451
+ // action id is the full `plugin::`/`admin::` leaf segment (not the UI subcategory).
452
+ // For those, let the checker derive the action from each leaf path (subject stays null).
453
+ const isPluginOrSetting = root === 'plugins' || root === 'settings';
449
454
  let actionId;
450
455
  let subject;
451
- if (pathToValue.length >= 2) {
452
- subject = pathToValue[1];
453
- }
454
- if (pathToValue.length >= 3) {
455
- actionId = pathToValue[2];
456
+ if (isPluginOrSetting) {
457
+ subject = null;
458
+ } else {
459
+ if (pathToValue.length >= 2) {
460
+ subject = pathToValue[1];
461
+ }
462
+ if (pathToValue.length >= 3) {
463
+ actionId = pathToValue[2];
464
+ }
456
465
  }
457
466
  const permissionChecker = createDynamicActionPermissionChecker(subject, actionId, userPermissions);
458
467
  const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);
459
468
  // In App Token context, when enabling, inherit conditions from the user's permissions.
460
469
  if (value === true && userPermissions !== undefined) {
461
- const root = pathToValue[0];
462
470
  const subjectForLookup = root === 'collectionTypes' || root === 'singleTypes' ? subject ?? null : null;
463
471
  if (actionId !== undefined && subjectForLookup !== null) {
464
472
  inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);
@@ -1 +1 @@
1
- {"version":3,"file":"Permissions.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport {\n ConditionForm,\n Form,\n PropertyChildForm,\n createDefaultCTForm,\n createDefaultForm,\n} from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { hasLocaleValidationErrors } from '../utils/localePermissionValidation';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n hasLocaleValidationErrors: () => boolean;\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n onLocaleValidationChange?: (hasErrors: boolean) => void;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n (\n { layout, isFormDisabled, onLocaleValidationChange, permissions = [], userPermissions },\n api\n ) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n onLocaleValidationChange?.(hasLocaleValidationErrors(modifiedData));\n }, [modifiedData, onLocaleValidationChange]);\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n const permissionsToSend = formatPermissionsForAPI(modifiedData).map((perm) =>\n restoreNullLocalesIfUnchanged(perm, permissions, initialData, modifiedData)\n );\n\n return { permissionsToSend, didUpdateConditions };\n },\n hasLocaleValidationErrors() {\n return hasLocaleValidationErrors(modifiedData);\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n let actionId: string | undefined;\n let subject: string | undefined;\n\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const root = pathToValue[0];\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * restoreNullLocalesIfUnchanged\n * Extracted at module level to avoid nesting arrow functions more than 4 levels deep inside\n * the useImperativeHandle → getPermissions → map chain.\n * -----------------------------------------------------------------------------------------------*/\n\ntype SentPermission = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;\n\nconst restoreNullLocalesIfUnchanged = (\n perm: SentPermission,\n originalPermissions: Permission[],\n initialData: PermissionForms,\n modifiedData: PermissionForms\n): SentPermission => {\n if (!perm.subject) return perm;\n\n const original = originalPermissions.find(\n (p) => p.action === perm.action && p.subject === perm.subject\n );\n\n // null means \"all locales\" in legacy DBs — preserve it if the user hasn't changed anything\n if (original?.properties?.locales !== null) return perm;\n\n const kind =\n perm.subject in modifiedData.collectionTypes\n ? ('collectionTypes' as const)\n : perm.subject in modifiedData.singleTypes\n ? ('singleTypes' as const)\n : null;\n if (!kind) return perm;\n\n const initialActionForm = initialData[kind]?.[perm.subject]?.[perm.action];\n const modifiedActionForm = modifiedData[kind]?.[perm.subject]?.[perm.action];\n\n if (!initialActionForm || !modifiedActionForm) return perm;\n\n const initialLocaleEntry = (initialActionForm.properties as PropertyChildForm)['locales'];\n const modifiedLocaleEntry = (modifiedActionForm.properties as PropertyChildForm)['locales'];\n\n if (\n !initialLocaleEntry ||\n typeof initialLocaleEntry === 'boolean' ||\n !modifiedLocaleEntry ||\n typeof modifiedLocaleEntry === 'boolean'\n ) {\n return perm;\n }\n\n const localesUnchanged =\n Object.keys(initialLocaleEntry).length === Object.keys(modifiedLocaleEntry).length &&\n Object.entries(initialLocaleEntry).every(\n ([locale, val]) => modifiedLocaleEntry[locale] === val\n );\n\n if (!localesUnchanged) return perm;\n\n return { ...perm, properties: { ...perm.properties, locales: null } };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","onLocaleValidationChange","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useEffect","hasLocaleValidationErrors","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","map","perm","restoreNullLocalesIfUnchanged","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","originalPermissions","original","p","locales","initialActionForm","modifiedActionForm","initialLocaleEntry","modifiedLocaleEntry","localesUnchanged","every","locale","val","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
1
+ {"version":3,"file":"Permissions.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport {\n ConditionForm,\n Form,\n PropertyChildForm,\n createDefaultCTForm,\n createDefaultForm,\n} from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { hasLocaleValidationErrors } from '../utils/localePermissionValidation';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n hasLocaleValidationErrors: () => boolean;\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n onLocaleValidationChange?: (hasErrors: boolean) => void;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n (\n { layout, isFormDisabled, onLocaleValidationChange, permissions = [], userPermissions },\n api\n ) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n onLocaleValidationChange?.(hasLocaleValidationErrors(modifiedData));\n }, [modifiedData, onLocaleValidationChange]);\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n const permissionsToSend = formatPermissionsForAPI(modifiedData).map((perm) =>\n restoreNullLocalesIfUnchanged(perm, permissions, initialData, modifiedData)\n );\n\n return { permissionsToSend, didUpdateConditions };\n },\n hasLocaleValidationErrors() {\n return hasLocaleValidationErrors(modifiedData);\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const root = pathToValue[0];\n // Plugin & setting permissions are stored with `subject: null` and their real\n // action id is the full `plugin::`/`admin::` leaf segment (not the UI subcategory).\n // For those, let the checker derive the action from each leaf path (subject stays null).\n const isPluginOrSetting = root === 'plugins' || root === 'settings';\n\n let actionId: string | undefined;\n let subject: string | null | undefined;\n\n if (isPluginOrSetting) {\n subject = null;\n } else {\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * restoreNullLocalesIfUnchanged\n * Extracted at module level to avoid nesting arrow functions more than 4 levels deep inside\n * the useImperativeHandle → getPermissions → map chain.\n * -----------------------------------------------------------------------------------------------*/\n\ntype SentPermission = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;\n\nconst restoreNullLocalesIfUnchanged = (\n perm: SentPermission,\n originalPermissions: Permission[],\n initialData: PermissionForms,\n modifiedData: PermissionForms\n): SentPermission => {\n if (!perm.subject) return perm;\n\n const original = originalPermissions.find(\n (p) => p.action === perm.action && p.subject === perm.subject\n );\n\n // null means \"all locales\" in legacy DBs — preserve it if the user hasn't changed anything\n if (original?.properties?.locales !== null) return perm;\n\n const kind =\n perm.subject in modifiedData.collectionTypes\n ? ('collectionTypes' as const)\n : perm.subject in modifiedData.singleTypes\n ? ('singleTypes' as const)\n : null;\n if (!kind) return perm;\n\n const initialActionForm = initialData[kind]?.[perm.subject]?.[perm.action];\n const modifiedActionForm = modifiedData[kind]?.[perm.subject]?.[perm.action];\n\n if (!initialActionForm || !modifiedActionForm) return perm;\n\n const initialLocaleEntry = (initialActionForm.properties as PropertyChildForm)['locales'];\n const modifiedLocaleEntry = (modifiedActionForm.properties as PropertyChildForm)['locales'];\n\n if (\n !initialLocaleEntry ||\n typeof initialLocaleEntry === 'boolean' ||\n !modifiedLocaleEntry ||\n typeof modifiedLocaleEntry === 'boolean'\n ) {\n return perm;\n }\n\n const localesUnchanged =\n Object.keys(initialLocaleEntry).length === Object.keys(modifiedLocaleEntry).length &&\n Object.entries(initialLocaleEntry).every(\n ([locale, val]) => modifiedLocaleEntry[locale] === val\n );\n\n if (!localesUnchanged) return perm;\n\n return { ...perm, properties: { ...perm.properties, locales: null } };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","onLocaleValidationChange","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useEffect","hasLocaleValidationErrors","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","map","perm","restoreNullLocalesIfUnchanged","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","isPluginOrSetting","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","originalPermissions","original","p","locales","initialActionForm","modifiedActionForm","initialLocaleEntry","modifiedLocaleEntry","localesUnchanged","every","locale","val","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}