@strapi/admin 5.44.0 → 5.45.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.
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js +49 -0
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +49 -0
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js +4 -4
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs +4 -4
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.js +48 -11
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.mjs +49 -12
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +21 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +21 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +33 -0
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs +14 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/constants.js +182 -151
- package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.mjs +182 -151
- package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js +17 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs +15 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +314 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs +292 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +70 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs +49 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +254 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs +231 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +42 -33
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +43 -34
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +23 -12
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +23 -12
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +124 -35
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +126 -37
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +24 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +24 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +5 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +5 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +171 -36
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +172 -37
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +5 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +5 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +59 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs +40 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js +89 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs +86 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js +35 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs +35 -10
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +6 -3
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +6 -3
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/router.js +4 -4
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js +85 -2
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs +80 -3
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +16 -1
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +16 -1
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +4 -1
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +99 -21
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +99 -21
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/src/constants.d.ts +26 -0
- package/dist/admin/src/core/apis/router.d.ts +1 -1
- package/dist/admin/src/features/Tracking.d.ts +2 -1
- package/dist/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.d.ts +24 -0
- package/dist/admin/src/pages/Settings/components/Tokens/Table.d.ts +2 -1
- package/dist/admin/src/pages/Settings/components/Tokens/constants.d.ts +17 -0
- package/dist/admin/src/pages/Settings/constants.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/AdminTokens/CreateView.d.ts +1 -0
- package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.d.ts +2 -0
- package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.d.ts +13 -0
- package/dist/admin/src/pages/Settings/pages/AdminTokens/ListView.d.ts +2 -0
- package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +4 -3
- package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +3 -1
- package/dist/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.d.ts +1 -0
- package/dist/admin/src/pages/Settings/pages/Roles/components/Permissions.d.ts +5 -0
- package/dist/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.d.ts +8 -7
- package/dist/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.d.ts +27 -0
- package/dist/admin/src/pages/Settings/pages/Roles/utils/updateValues.d.ts +8 -2
- package/dist/admin/src/services/apiTokens.d.ts +5 -2
- package/dist/admin/src/types/permissions.d.ts +1 -1
- package/dist/server/server/src/bootstrap.js +37 -5
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +37 -5
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/config/admin-actions.js +48 -0
- package/dist/server/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/server/src/config/admin-actions.mjs +48 -0
- package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/server/src/content-types/Permission.js +10 -1
- package/dist/server/server/src/content-types/Permission.js.map +1 -1
- package/dist/server/server/src/content-types/Permission.mjs +10 -1
- package/dist/server/server/src/content-types/Permission.mjs.map +1 -1
- package/dist/server/server/src/content-types/User.js +8 -0
- package/dist/server/server/src/content-types/User.js.map +1 -1
- package/dist/server/server/src/content-types/User.mjs +8 -0
- package/dist/server/server/src/content-types/User.mjs.map +1 -1
- package/dist/server/server/src/content-types/api-token.js +27 -1
- package/dist/server/server/src/content-types/api-token.js.map +1 -1
- package/dist/server/server/src/content-types/api-token.mjs +27 -1
- package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin-token.js +194 -0
- package/dist/server/server/src/controllers/admin-token.js.map +1 -0
- package/dist/server/server/src/controllers/admin-token.mjs +192 -0
- package/dist/server/server/src/controllers/admin-token.mjs.map +1 -0
- package/dist/server/server/src/controllers/api-token.js +48 -47
- package/dist/server/server/src/controllers/api-token.js.map +1 -1
- package/dist/server/server/src/controllers/api-token.mjs +48 -47
- package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/index.js +2 -0
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs +2 -0
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js +2 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs +2 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/policies/index.js +2 -0
- package/dist/server/server/src/policies/index.js.map +1 -1
- package/dist/server/server/src/policies/index.mjs +2 -0
- package/dist/server/server/src/policies/index.mjs.map +1 -1
- package/dist/server/server/src/policies/isAdminTokensEnabled.js +16 -0
- package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +1 -0
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +14 -0
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +1 -0
- package/dist/server/server/src/register.js +4 -2
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +4 -2
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.js +140 -0
- package/dist/server/server/src/routes/admin-tokens.js.map +1 -0
- package/dist/server/server/src/routes/admin-tokens.mjs +138 -0
- package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -0
- package/dist/server/server/src/routes/index.js +2 -0
- package/dist/server/server/src/routes/index.js.map +1 -1
- package/dist/server/server/src/routes/index.mjs +2 -0
- package/dist/server/server/src/routes/index.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +805 -101
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +800 -101
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js +2 -0
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs +2 -0
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js +1 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs +1 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- package/dist/server/server/src/services/index.js +2 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -2
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +6 -0
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +6 -0
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +11 -2
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +12 -3
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +3 -0
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +3 -0
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin-token.js +110 -0
- package/dist/server/server/src/strategies/admin-token.js.map +1 -0
- package/dist/server/server/src/strategies/admin-token.mjs +104 -0
- package/dist/server/server/src/strategies/admin-token.mjs.map +1 -0
- package/dist/server/server/src/strategies/api-token-utils.js +56 -0
- package/dist/server/server/src/strategies/api-token-utils.js.map +1 -0
- package/dist/server/server/src/strategies/api-token-utils.mjs +52 -0
- package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -0
- package/dist/server/server/src/strategies/content-api-token.js +104 -0
- package/dist/server/server/src/strategies/content-api-token.js.map +1 -0
- package/dist/server/server/src/strategies/content-api-token.mjs +98 -0
- package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.js +28 -0
- package/dist/server/server/src/validation/admin-tokens.js.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.mjs +25 -0
- package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -0
- package/dist/server/server/src/validation/api-tokens.js +5 -2
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs +5 -2
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/project-settings.js +15 -16
- package/dist/server/server/src/validation/project-settings.js.map +1 -1
- package/dist/server/server/src/validation/project-settings.mjs +4 -5
- package/dist/server/server/src/validation/project-settings.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/content-types/Permission.d.ts +9 -0
- package/dist/server/src/content-types/Permission.d.ts.map +1 -1
- package/dist/server/src/content-types/User.d.ts +8 -0
- package/dist/server/src/content-types/User.d.ts.map +1 -1
- package/dist/server/src/content-types/api-token.d.ts +23 -0
- package/dist/server/src/content-types/api-token.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +40 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-token.d.ts +12 -0
- package/dist/server/src/controllers/admin-token.d.ts.map +1 -0
- package/dist/server/src/controllers/api-token.d.ts +0 -1
- package/dist/server/src/controllers/api-token.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +9 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +56 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts +5 -0
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts +7 -0
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin-tokens.d.ts +15 -0
- package/dist/server/src/routes/admin-tokens.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts +136 -12
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +13 -11
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +2 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +5 -0
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts +1 -0
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/strategies/admin-token.d.ts +51 -0
- package/dist/server/src/strategies/admin-token.d.ts.map +1 -0
- package/dist/server/src/strategies/api-token-utils.d.ts +13 -0
- package/dist/server/src/strategies/api-token-utils.d.ts.map +1 -0
- package/dist/server/src/strategies/{api-token.d.ts → content-api-token.d.ts} +10 -11
- package/dist/server/src/strategies/content-api-token.d.ts.map +1 -0
- package/dist/server/src/strategies/index.d.ts +2 -1
- package/dist/server/src/strategies/index.d.ts.map +1 -1
- package/dist/server/src/validation/admin-tokens.d.ts +75 -0
- package/dist/server/src/validation/admin-tokens.d.ts.map +1 -0
- package/dist/server/src/validation/api-tokens.d.ts +4 -2
- package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
- package/dist/server/src/validation/project-settings.d.ts +10 -10
- package/dist/server/src/validation/project-settings.d.ts.map +1 -1
- package/dist/shared/contracts/admin-token.d.ts +122 -0
- package/dist/shared/contracts/admin-token.d.ts.map +1 -0
- package/dist/shared/contracts/api-token.d.ts +6 -95
- package/dist/shared/contracts/api-token.d.ts.map +1 -1
- package/dist/shared/contracts/content-api-token.d.ts +97 -0
- package/dist/shared/contracts/content-api-token.d.ts.map +1 -0
- package/dist/shared/contracts/shared.d.ts +1 -0
- package/dist/shared/contracts/shared.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js +0 -37
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs +0 -16
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.js.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.mjs.map +0 -1
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.d.ts +0 -20
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.d.ts +0 -17
- package/dist/server/server/src/strategies/api-token.js +0 -144
- package/dist/server/server/src/strategies/api-token.js.map +0 -1
- package/dist/server/server/src/strategies/api-token.mjs +0 -138
- package/dist/server/server/src/strategies/api-token.mjs.map +0 -1
- package/dist/server/src/strategies/api-token.d.ts.map +0 -1
- /package/dist/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.d.ts +0 -0
|
@@ -12,6 +12,7 @@ var set = require('lodash/set');
|
|
|
12
12
|
var reactIntl = require('react-intl');
|
|
13
13
|
var objects = require('../../../../../utils/objects.js');
|
|
14
14
|
var usePermissionsDataManager = require('../hooks/usePermissionsDataManager.js');
|
|
15
|
+
var createPermissionChecker = require('../utils/createPermissionChecker.js');
|
|
15
16
|
var difference = require('../utils/difference.js');
|
|
16
17
|
var forms = require('../utils/forms.js');
|
|
17
18
|
var layouts = require('../utils/layouts.js');
|
|
@@ -62,7 +63,7 @@ const TAB_LABELS = [
|
|
|
62
63
|
id: 'settings'
|
|
63
64
|
}
|
|
64
65
|
];
|
|
65
|
-
const Permissions = /*#__PURE__*/ React__namespace.forwardRef(({ layout, isFormDisabled, permissions: permissions$1 = [] }, api)=>{
|
|
66
|
+
const Permissions = /*#__PURE__*/ React__namespace.forwardRef(({ layout, isFormDisabled, permissions: permissions$1 = [], userPermissions }, api)=>{
|
|
66
67
|
const [{ initialData, layouts, modifiedData }, dispatch] = React__namespace.useReducer(reducer, initialState, ()=>init(layout, permissions$1));
|
|
67
68
|
const { formatMessage } = reactIntl.useIntl();
|
|
68
69
|
React__namespace.useImperativeHandle(api, ()=>{
|
|
@@ -99,43 +100,58 @@ const Permissions = /*#__PURE__*/ React__namespace.forwardRef(({ layout, isFormD
|
|
|
99
100
|
}
|
|
100
101
|
};
|
|
101
102
|
});
|
|
102
|
-
const handleChangeCollectionTypeLeftActionRowCheckbox = (pathToCollectionType, propertyName, rowName, value)=>{
|
|
103
|
+
const handleChangeCollectionTypeLeftActionRowCheckbox = React__namespace.useCallback((pathToCollectionType, propertyName, rowName, value)=>{
|
|
103
104
|
dispatch({
|
|
104
105
|
type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',
|
|
105
106
|
pathToCollectionType,
|
|
106
107
|
propertyName,
|
|
107
108
|
rowName,
|
|
108
|
-
value
|
|
109
|
+
value,
|
|
110
|
+
userPermissions
|
|
109
111
|
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
+
}, [
|
|
113
|
+
userPermissions
|
|
114
|
+
]);
|
|
115
|
+
const handleChangeCollectionTypeGlobalActionCheckbox = React__namespace.useCallback((collectionTypeKind, actionId, value)=>{
|
|
112
116
|
dispatch({
|
|
113
117
|
type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',
|
|
114
118
|
collectionTypeKind,
|
|
115
119
|
actionId,
|
|
116
|
-
value
|
|
120
|
+
value,
|
|
121
|
+
userPermissions
|
|
117
122
|
});
|
|
118
|
-
}
|
|
119
|
-
|
|
123
|
+
}, [
|
|
124
|
+
userPermissions
|
|
125
|
+
]);
|
|
126
|
+
const handleChangeConditions = React__namespace.useCallback((conditions)=>{
|
|
120
127
|
dispatch({
|
|
121
128
|
type: 'ON_CHANGE_CONDITIONS',
|
|
122
|
-
conditions
|
|
129
|
+
conditions,
|
|
130
|
+
userPermissions
|
|
123
131
|
});
|
|
124
|
-
}
|
|
132
|
+
}, [
|
|
133
|
+
userPermissions
|
|
134
|
+
]);
|
|
125
135
|
const handleChangeSimpleCheckbox = React__namespace.useCallback(({ target: { name, value } })=>{
|
|
126
136
|
dispatch({
|
|
127
137
|
type: 'ON_CHANGE_SIMPLE_CHECKBOX',
|
|
128
138
|
keys: name,
|
|
129
|
-
value
|
|
139
|
+
value,
|
|
140
|
+
userPermissions
|
|
130
141
|
});
|
|
131
|
-
}, [
|
|
142
|
+
}, [
|
|
143
|
+
userPermissions
|
|
144
|
+
]);
|
|
132
145
|
const handleChangeParentCheckbox = React__namespace.useCallback(({ target: { name, value } })=>{
|
|
133
146
|
dispatch({
|
|
134
147
|
type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',
|
|
135
148
|
keys: name,
|
|
136
|
-
value
|
|
149
|
+
value,
|
|
150
|
+
userPermissions
|
|
137
151
|
});
|
|
138
|
-
}, [
|
|
152
|
+
}, [
|
|
153
|
+
userPermissions
|
|
154
|
+
]);
|
|
139
155
|
return /*#__PURE__*/ jsxRuntime.jsx(usePermissionsDataManager.PermissionsDataManagerProvider, {
|
|
140
156
|
availableConditions: layout.conditions,
|
|
141
157
|
modifiedData: modifiedData,
|
|
@@ -144,6 +160,7 @@ const Permissions = /*#__PURE__*/ React__namespace.forwardRef(({ layout, isFormD
|
|
|
144
160
|
onChangeParentCheckbox: handleChangeParentCheckbox,
|
|
145
161
|
onChangeCollectionTypeLeftActionRowCheckbox: handleChangeCollectionTypeLeftActionRowCheckbox,
|
|
146
162
|
onChangeCollectionTypeGlobalActionCheckbox: handleChangeCollectionTypeGlobalActionCheckbox,
|
|
163
|
+
userPermissions: userPermissions,
|
|
147
164
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
|
|
148
165
|
defaultValue: TAB_LABELS[0].id,
|
|
149
166
|
children: [
|
|
@@ -201,13 +218,42 @@ const initialState = {
|
|
|
201
218
|
modifiedData: {},
|
|
202
219
|
layouts: {}
|
|
203
220
|
};
|
|
221
|
+
const buildInheritedConditionsFromExisting = (existing, enabledConditions = [])=>{
|
|
222
|
+
if (!objects.isObject(existing)) {
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
const enabled = new Set(enabledConditions);
|
|
226
|
+
return Object.keys(existing).reduce((acc, key)=>{
|
|
227
|
+
acc[key] = enabled.has(key);
|
|
228
|
+
return acc;
|
|
229
|
+
}, {});
|
|
230
|
+
};
|
|
231
|
+
const inheritConditionsAtPath = (data, pathToActionObject, actionId, subject, userPermissions)=>{
|
|
232
|
+
if (userPermissions === undefined) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const matchingPermission = userPermissions.find((perm)=>perm.action === actionId && perm.subject === subject);
|
|
236
|
+
if (matchingPermission === undefined) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const obj = data;
|
|
240
|
+
const existingConditions = get(obj, [
|
|
241
|
+
...pathToActionObject,
|
|
242
|
+
'conditions'
|
|
243
|
+
], undefined);
|
|
244
|
+
const nextConditions = buildInheritedConditionsFromExisting(existingConditions, matchingPermission.conditions ?? []);
|
|
245
|
+
if (nextConditions) {
|
|
246
|
+
set(obj, [
|
|
247
|
+
...pathToActionObject,
|
|
248
|
+
'conditions'
|
|
249
|
+
], nextConditions);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
204
252
|
/* eslint-disable consistent-return */ const reducer = (state, action)=>immer.produce(state, (draftState)=>{
|
|
205
253
|
switch(action.type){
|
|
206
|
-
// This action is called when a checkbox in the <GlobalActions />
|
|
207
|
-
// changes
|
|
208
254
|
case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX':
|
|
209
255
|
{
|
|
210
|
-
const { collectionTypeKind, actionId, value } = action;
|
|
256
|
+
const { collectionTypeKind, actionId, value, userPermissions } = action;
|
|
211
257
|
const pathToData = [
|
|
212
258
|
'modifiedData',
|
|
213
259
|
collectionTypeKind
|
|
@@ -219,10 +265,12 @@ const initialState = {
|
|
|
219
265
|
actionId
|
|
220
266
|
], undefined);
|
|
221
267
|
if (collectionTypeActionData) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
268
|
+
const subjectPermissionChecker = createPermissionChecker.createFieldPermissionChecker(actionId, collectionType, userPermissions);
|
|
269
|
+
let updatedValues = updateValues.updateValuesWithPermissions(collectionTypeActionData, value, subjectPermissionChecker);
|
|
270
|
+
if (value === true) {
|
|
271
|
+
inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);
|
|
272
|
+
}
|
|
273
|
+
if (value === false && updatedValues.conditions !== undefined) {
|
|
226
274
|
// @ts-expect-error – TODO: type better
|
|
227
275
|
const updatedConditions = updateValues.updateValues(updatedValues.conditions, false);
|
|
228
276
|
updatedValues = {
|
|
@@ -241,14 +289,12 @@ const initialState = {
|
|
|
241
289
|
}
|
|
242
290
|
case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX':
|
|
243
291
|
{
|
|
244
|
-
const { pathToCollectionType, propertyName, rowName, value } = action;
|
|
292
|
+
const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;
|
|
245
293
|
let nextModifiedDataState = cloneDeep(state.modifiedData);
|
|
246
294
|
const pathToModifiedDataCollectionType = pathToCollectionType.split('..');
|
|
247
295
|
const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});
|
|
296
|
+
const subject = pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];
|
|
248
297
|
Object.keys(objToUpdate).forEach((actionId)=>{
|
|
249
|
-
// When a ct has multiple properties (ex: locales, field)
|
|
250
|
-
// We need to make sure that we add any new property to the modifiedData
|
|
251
|
-
// object.
|
|
252
298
|
if (has(objToUpdate[actionId], `properties.${propertyName}`)) {
|
|
253
299
|
const objValue = get(objToUpdate, [
|
|
254
300
|
actionId,
|
|
@@ -264,15 +310,57 @@ const initialState = {
|
|
|
264
310
|
rowName
|
|
265
311
|
];
|
|
266
312
|
if (!objects.isObject(objValue)) {
|
|
267
|
-
|
|
313
|
+
if (userPermissions !== undefined && propertyName === 'fields') {
|
|
314
|
+
const hasPermission = userPermissions.some((perm)=>{
|
|
315
|
+
if (perm.action !== actionId || perm.subject !== subject) return false;
|
|
316
|
+
const fields = perm.properties?.fields;
|
|
317
|
+
if (fields === null || fields === undefined) return true;
|
|
318
|
+
if (Array.isArray(fields) && fields.length === 0) return false;
|
|
319
|
+
return Array.isArray(fields) && fields.some((f)=>rowName === f || rowName.startsWith(`${f}.`));
|
|
320
|
+
});
|
|
321
|
+
if (hasPermission === true) {
|
|
322
|
+
set(nextModifiedDataState, pathToDataToSet, value);
|
|
323
|
+
if (value === true) {
|
|
324
|
+
inheritConditionsAtPath(nextModifiedDataState, [
|
|
325
|
+
...pathToModifiedDataCollectionType,
|
|
326
|
+
actionId
|
|
327
|
+
], actionId, subject, userPermissions);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
} else {
|
|
331
|
+
set(nextModifiedDataState, pathToDataToSet, value);
|
|
332
|
+
if (value === true && userPermissions !== undefined) {
|
|
333
|
+
inheritConditionsAtPath(nextModifiedDataState, [
|
|
334
|
+
...pathToModifiedDataCollectionType,
|
|
335
|
+
actionId
|
|
336
|
+
], actionId, subject, userPermissions);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
268
339
|
} else {
|
|
269
|
-
const
|
|
340
|
+
const permissionChecker = userPermissions !== undefined && propertyName === 'fields' ? (path)=>{
|
|
341
|
+
const fullFieldPath = [
|
|
342
|
+
rowName,
|
|
343
|
+
...path
|
|
344
|
+
].join('.');
|
|
345
|
+
const checker = createPermissionChecker.createFieldPermissionChecker(actionId, subject, userPermissions);
|
|
346
|
+
return checker === undefined ? true : checker([
|
|
347
|
+
'properties',
|
|
348
|
+
'fields',
|
|
349
|
+
fullFieldPath
|
|
350
|
+
]);
|
|
351
|
+
} : undefined;
|
|
352
|
+
const updatedValue = updateValues.updateValuesWithPermissions(objValue, value, permissionChecker);
|
|
270
353
|
set(nextModifiedDataState, pathToDataToSet, updatedValue);
|
|
354
|
+
if (value === true && userPermissions !== undefined) {
|
|
355
|
+
inheritConditionsAtPath(nextModifiedDataState, [
|
|
356
|
+
...pathToModifiedDataCollectionType,
|
|
357
|
+
actionId
|
|
358
|
+
], actionId, subject, userPermissions);
|
|
359
|
+
}
|
|
271
360
|
}
|
|
272
361
|
}
|
|
273
362
|
});
|
|
274
|
-
|
|
275
|
-
if (!value) {
|
|
363
|
+
if (value === false) {
|
|
276
364
|
// @ts-expect-error – TODO: type better
|
|
277
365
|
nextModifiedDataState = updateConditionsToFalse.updateConditionsToFalse(nextModifiedDataState);
|
|
278
366
|
}
|
|
@@ -281,6 +369,10 @@ const initialState = {
|
|
|
281
369
|
}
|
|
282
370
|
case 'ON_CHANGE_CONDITIONS':
|
|
283
371
|
{
|
|
372
|
+
// In App Token context, conditions are inherited from the user's permissions and must be read-only.
|
|
373
|
+
if (action.userPermissions !== undefined) {
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
284
376
|
Object.entries(action.conditions).forEach((array)=>{
|
|
285
377
|
const [stringPathToData, conditionsToUpdate] = array;
|
|
286
378
|
set(draftState, [
|
|
@@ -294,11 +386,30 @@ const initialState = {
|
|
|
294
386
|
case 'ON_CHANGE_SIMPLE_CHECKBOX':
|
|
295
387
|
{
|
|
296
388
|
let nextModifiedDataState = cloneDeep(state.modifiedData);
|
|
389
|
+
const keysArray = action.keys.split('..');
|
|
297
390
|
set(nextModifiedDataState, [
|
|
298
|
-
...
|
|
391
|
+
...keysArray
|
|
299
392
|
], action.value);
|
|
300
|
-
//
|
|
301
|
-
if (
|
|
393
|
+
// In App Token context, when enabling a permission, inherit the user's conditions.
|
|
394
|
+
if (action.value === true && action.userPermissions !== undefined) {
|
|
395
|
+
const propertiesIndex = keysArray.indexOf('properties');
|
|
396
|
+
if (propertiesIndex > 0) {
|
|
397
|
+
const actionId = keysArray[propertiesIndex - 1];
|
|
398
|
+
const root = keysArray[0];
|
|
399
|
+
if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {
|
|
400
|
+
const subject = keysArray[1];
|
|
401
|
+
inheritConditionsAtPath(nextModifiedDataState, [
|
|
402
|
+
root,
|
|
403
|
+
subject,
|
|
404
|
+
actionId
|
|
405
|
+
], actionId, subject, action.userPermissions);
|
|
406
|
+
} else {
|
|
407
|
+
const pathToActionObject = keysArray.slice(0, propertiesIndex);
|
|
408
|
+
inheritConditionsAtPath(nextModifiedDataState, pathToActionObject, actionId, null, action.userPermissions);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (action.value === false) {
|
|
302
413
|
// @ts-expect-error – TODO: type better
|
|
303
414
|
nextModifiedDataState = updateConditionsToFalse.updateConditionsToFalse(nextModifiedDataState);
|
|
304
415
|
}
|
|
@@ -339,16 +450,40 @@ const initialState = {
|
|
|
339
450
|
*
|
|
340
451
|
*/ case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX':
|
|
341
452
|
{
|
|
342
|
-
const { keys, value } = action;
|
|
453
|
+
const { keys, value, userPermissions } = action;
|
|
343
454
|
const pathToValue = [
|
|
344
455
|
...keys.split('..')
|
|
345
456
|
];
|
|
346
457
|
let nextModifiedDataState = cloneDeep(state.modifiedData);
|
|
347
458
|
const oldValues = get(nextModifiedDataState, pathToValue, {});
|
|
348
|
-
|
|
459
|
+
let actionId;
|
|
460
|
+
let subject;
|
|
461
|
+
if (pathToValue.length >= 2) {
|
|
462
|
+
subject = pathToValue[1];
|
|
463
|
+
}
|
|
464
|
+
if (pathToValue.length >= 3) {
|
|
465
|
+
actionId = pathToValue[2];
|
|
466
|
+
}
|
|
467
|
+
const permissionChecker = createPermissionChecker.createDynamicActionPermissionChecker(subject, actionId, userPermissions);
|
|
468
|
+
const updatedValues = updateValues.updateValuesWithPermissions(oldValues, value, permissionChecker);
|
|
469
|
+
// In App Token context, when enabling, inherit conditions from the user's permissions.
|
|
470
|
+
if (value === true && userPermissions !== undefined) {
|
|
471
|
+
const root = pathToValue[0];
|
|
472
|
+
const subjectForLookup = root === 'collectionTypes' || root === 'singleTypes' ? subject ?? null : null;
|
|
473
|
+
if (actionId !== undefined && subjectForLookup !== null) {
|
|
474
|
+
inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);
|
|
475
|
+
} else if (objects.isObject(updatedValues)) {
|
|
476
|
+
const updatedValuesObj = updatedValues;
|
|
477
|
+
Object.keys(updatedValuesObj).forEach((key)=>{
|
|
478
|
+
const maybeActionObj = updatedValuesObj[key];
|
|
479
|
+
if (objects.isObject(maybeActionObj)) {
|
|
480
|
+
inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
}
|
|
349
485
|
set(nextModifiedDataState, pathToValue, updatedValues);
|
|
350
|
-
|
|
351
|
-
if (!value) {
|
|
486
|
+
if (value === false) {
|
|
352
487
|
// @ts-expect-error – TODO: type better
|
|
353
488
|
nextModifiedDataState = updateConditionsToFalse.updateConditionsToFalse(nextModifiedDataState);
|
|
354
489
|
}
|
|
@@ -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 { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport { difference } from '../utils/difference';\nimport { ConditionForm, Form, createDefaultCTForm, createDefaultForm } from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues } 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 resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n ({ layout, isFormDisabled, permissions = [] }, api) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\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 return { permissionsToSend: formatPermissionsForAPI(modifiedData), didUpdateConditions };\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 = (\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 });\n };\n\n const handleChangeCollectionTypeGlobalActionCheckbox = (\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 });\n };\n\n const handleChangeConditions = (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions });\n };\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n });\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 >\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}\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}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\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\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n // This action is called when a checkbox in the <GlobalActions />\n // changes\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value } = 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 let updatedValues = updateValues(collectionTypeActionData, value);\n\n // We need to remove the applied conditions\n // @ts-expect-error – TODO: type better\n if (!value && updatedValues.conditions) {\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 } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n Object.keys(objToUpdate).forEach((actionId) => {\n // When a ct has multiple properties (ex: locales, field)\n // We need to make sure that we add any new property to the modifiedData\n // object.\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 set(nextModifiedDataState, pathToDataToSet, value);\n } else {\n const updatedValue = updateValues(objValue, value);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n }\n }\n });\n\n // When we uncheck a row, we need to check if we also need to disable the conditions\n if (!value) {\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 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 set(nextModifiedDataState, [...action.keys.split('..')], action.value);\n\n // When we uncheck a single checkbox we need to remove the conditions from the parent\n if (!action.value) {\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 } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const updatedValues = updateValues(oldValues, value);\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n // When we uncheck a parent checkbox we need to remove the associated conditions\n if (!value) {\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 * 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","permissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","useCallback","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","map","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","state","action","produce","draftState","pathToData","get","forEach","collectionType","collectionTypeActionData","undefined","updatedValues","updateValues","updatedConditions","set","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","objValue","pathToDataToSet","isObject","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","pathToValue","oldValues","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 { ConditionForm, Form, createDefaultCTForm, createDefaultForm } from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\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 resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n ({ layout, isFormDisabled, permissions = [], userPermissions }, api) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\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 return { permissionsToSend: formatPermissionsForAPI(modifiedData), didUpdateConditions };\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 * 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","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","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","map","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","perm","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","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
|