@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
package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginsAndSettings.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PluginsAndSettings.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const {\n modifiedData,\n onChangeParentCheckbox,\n onChangeSimpleCheckbox,\n checkUserHasPermission,\n userPermissions,\n } = usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n const userHasPermission = checkUserHasPermission(action, null);\n\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper\n $disabled={isFormDisabled || !userHasPermission}\n $hasConditions={hasConditions}\n >\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled || !userHasPermission}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n isReadOnly={userPermissions !== undefined}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","checkUserHasPermission","userPermissions","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","userHasPermission","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","isReadOnly","undefined","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ const Row = ({ childrenForm, kind, name, isFormDisabled = false, variant, pathTo
|
|
|
72
72
|
});
|
|
73
73
|
};
|
|
74
74
|
const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryName, pathToData })=>{
|
|
75
|
-
const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } = usePermissionsDataManager();
|
|
75
|
+
const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox, checkUserHasPermission, userPermissions } = usePermissionsDataManager();
|
|
76
76
|
const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);
|
|
77
77
|
const { formatMessage } = useIntl();
|
|
78
78
|
const mainData = get(modifiedData, pathToData, {});
|
|
@@ -180,6 +180,7 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
|
|
|
180
180
|
flex: 1
|
|
181
181
|
},
|
|
182
182
|
children: formattedActions.map(({ checkboxName, value, action, displayName, hasConditions })=>{
|
|
183
|
+
const userHasPermission = checkUserHasPermission(action, null);
|
|
183
184
|
return /*#__PURE__*/ jsx(Grid.Item, {
|
|
184
185
|
col: 4,
|
|
185
186
|
m: 6,
|
|
@@ -187,11 +188,11 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
|
|
|
187
188
|
direction: "column",
|
|
188
189
|
alignItems: "start",
|
|
189
190
|
children: /*#__PURE__*/ jsx(CheckboxWrapper, {
|
|
190
|
-
$disabled: isFormDisabled,
|
|
191
|
+
$disabled: isFormDisabled || !userHasPermission,
|
|
191
192
|
$hasConditions: hasConditions,
|
|
192
193
|
children: /*#__PURE__*/ jsx(Checkbox, {
|
|
193
194
|
name: checkboxName,
|
|
194
|
-
disabled: isFormDisabled,
|
|
195
|
+
disabled: isFormDisabled || !userHasPermission,
|
|
195
196
|
// Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91
|
|
196
197
|
onCheckedChange: (value)=>{
|
|
197
198
|
onChangeSimpleCheckbox({
|
|
@@ -226,6 +227,7 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
|
|
|
226
227
|
],
|
|
227
228
|
actions: formattedActions,
|
|
228
229
|
isFormDisabled: isFormDisabled,
|
|
230
|
+
isReadOnly: userPermissions !== undefined,
|
|
229
231
|
onClose: ()=>{
|
|
230
232
|
setIsConditionModalOpen(false);
|
|
231
233
|
}
|
package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginsAndSettings.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PluginsAndSettings.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const {\n modifiedData,\n onChangeParentCheckbox,\n onChangeSimpleCheckbox,\n checkUserHasPermission,\n userPermissions,\n } = usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n const userHasPermission = checkUserHasPermission(action, null);\n\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper\n $disabled={isFormDisabled || !userHasPermission}\n $hasConditions={hasConditions}\n >\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled || !userHasPermission}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n isReadOnly={userPermissions !== undefined}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","checkUserHasPermission","userPermissions","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","userHasPermission","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","isReadOnly","undefined","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
@@ -1,9 +1,67 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
3
5
|
var reactContext = require('@radix-ui/react-context');
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
function _interopNamespaceDefault(e) {
|
|
8
|
+
var n = Object.create(null);
|
|
9
|
+
if (e) {
|
|
10
|
+
Object.keys(e).forEach(function (k) {
|
|
11
|
+
if (k !== 'default') {
|
|
12
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return e[k]; }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
25
|
+
|
|
26
|
+
// eslint-disable-next-line check-file/filename-naming-convention
|
|
27
|
+
const [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] = reactContext.createContext('PermissionsDataManager');
|
|
6
28
|
const usePermissionsDataManager = ()=>usePermissionsDataManagerContext('usePermissionsDataManager');
|
|
29
|
+
const PermissionsDataManagerProvider = ({ children, userPermissions, availableConditions, modifiedData, onChangeConditions, onChangeSimpleCheckbox, onChangeParentCheckbox, onChangeCollectionTypeLeftActionRowCheckbox, onChangeCollectionTypeGlobalActionCheckbox })=>{
|
|
30
|
+
const checkUserHasPermission = React__namespace.useCallback((action, subject, field)=>{
|
|
31
|
+
if (userPermissions === undefined) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
const matchingPermission = userPermissions.find((perm)=>perm.action === action && perm.subject === subject);
|
|
35
|
+
if (matchingPermission === undefined) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (field === undefined) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
const fields = matchingPermission.properties?.fields;
|
|
42
|
+
if (fields === null || fields === undefined) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(fields) === false || fields.length === 0) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return fields.some((allowedField)=>allowedField === field || field.startsWith(`${allowedField}.`));
|
|
49
|
+
}, [
|
|
50
|
+
userPermissions
|
|
51
|
+
]);
|
|
52
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PermissionsDataManagerProviderRaw, {
|
|
53
|
+
availableConditions: availableConditions,
|
|
54
|
+
modifiedData: modifiedData,
|
|
55
|
+
onChangeConditions: onChangeConditions,
|
|
56
|
+
onChangeSimpleCheckbox: onChangeSimpleCheckbox,
|
|
57
|
+
onChangeParentCheckbox: onChangeParentCheckbox,
|
|
58
|
+
onChangeCollectionTypeLeftActionRowCheckbox: onChangeCollectionTypeLeftActionRowCheckbox,
|
|
59
|
+
onChangeCollectionTypeGlobalActionCheckbox: onChangeCollectionTypeGlobalActionCheckbox,
|
|
60
|
+
userPermissions: userPermissions,
|
|
61
|
+
checkUserHasPermission: checkUserHasPermission,
|
|
62
|
+
children: children
|
|
63
|
+
});
|
|
64
|
+
};
|
|
7
65
|
|
|
8
66
|
exports.PermissionsDataManagerProvider = PermissionsDataManagerProvider;
|
|
9
67
|
exports.usePermissionsDataManager = usePermissionsDataManager;
|
package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissionsDataManager.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.
|
|
1
|
+
{"version":3,"file":"usePermissionsDataManager.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.tsx"],"sourcesContent":["// eslint-disable-next-line check-file/filename-naming-convention\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n userPermissions?: AuthPermission[];\n checkUserHasPermission: (action: string, subject?: string | null, field?: string) => boolean;\n}\n\nconst [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\ninterface PermissionsDataManagerProviderProps\n extends Omit<PermissionsDataManagerContextValue, 'checkUserHasPermission'> {\n children: React.ReactNode;\n}\n\nconst PermissionsDataManagerProvider = ({\n children,\n userPermissions,\n availableConditions,\n modifiedData,\n onChangeConditions,\n onChangeSimpleCheckbox,\n onChangeParentCheckbox,\n onChangeCollectionTypeLeftActionRowCheckbox,\n onChangeCollectionTypeGlobalActionCheckbox,\n}: PermissionsDataManagerProviderProps) => {\n const checkUserHasPermission = React.useCallback(\n (action: string, subject?: string | null, field?: string): boolean => {\n if (userPermissions === undefined) {\n return true;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === action && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return false;\n }\n\n if (field === undefined) {\n return true;\n }\n\n const fields = matchingPermission.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) === false || fields.length === 0) {\n return false;\n }\n\n return fields.some(\n (allowedField) => allowedField === field || field.startsWith(`${allowedField}.`)\n );\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProviderRaw\n availableConditions={availableConditions}\n modifiedData={modifiedData}\n onChangeConditions={onChangeConditions}\n onChangeSimpleCheckbox={onChangeSimpleCheckbox}\n onChangeParentCheckbox={onChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={onChangeCollectionTypeLeftActionRowCheckbox}\n onChangeCollectionTypeGlobalActionCheckbox={onChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n checkUserHasPermission={checkUserHasPermission}\n >\n {children}\n </PermissionsDataManagerProviderRaw>\n );\n};\n\nexport { PermissionsDataManagerProvider };\n"],"names":["PermissionsDataManagerProviderRaw","usePermissionsDataManagerContext","createContext","usePermissionsDataManager","PermissionsDataManagerProvider","children","userPermissions","availableConditions","modifiedData","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","checkUserHasPermission","React","useCallback","action","subject","field","undefined","matchingPermission","find","perm","fields","properties","Array","isArray","length","some","allowedField","startsWith","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAsCA,MAAM,CAACA,iCAAAA,EAAmCC,gCAAAA,CAAiC,GACzEC,0BAAAA,CAAkD,wBAAA,CAAA;AAE7C,MAAMC,yBAAAA,GAA4B,IACvCF,gCAAAA,CAAiC,2BAAA;AAOnC,MAAMG,8BAAAA,GAAiC,CAAC,EACtCC,QAAQ,EACRC,eAAe,EACfC,mBAAmB,EACnBC,YAAY,EACZC,kBAAkB,EAClBC,sBAAsB,EACtBC,sBAAsB,EACtBC,2CAA2C,EAC3CC,0CAA0C,EACN,GAAA;AACpC,IAAA,MAAMC,yBAAyBC,gBAAAA,CAAMC,WAAW,CAC9C,CAACC,QAAgBC,OAAAA,EAAyBC,KAAAA,GAAAA;AACxC,QAAA,IAAIb,oBAAoBc,SAAAA,EAAW;YACjC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,MAAMC,kBAAAA,GAAqBf,eAAAA,CAAgBgB,IAAI,CAC7C,CAACC,IAAAA,GAASA,IAAAA,CAAKN,MAAM,KAAKA,MAAAA,IAAUM,IAAAA,CAAKL,OAAO,KAAKA,OAAAA,CAAAA;AAGvD,QAAA,IAAIG,uBAAuBD,SAAAA,EAAW;YACpC,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,IAAID,UAAUC,SAAAA,EAAW;YACvB,OAAO,IAAA;AACT,QAAA;QAEA,MAAMI,MAAAA,GAASH,kBAAAA,CAAmBI,UAAU,EAAED,MAAAA;QAE9C,IAAIA,MAAAA,KAAW,IAAA,IAAQA,MAAAA,KAAWJ,SAAAA,EAAW;YAC3C,OAAO,IAAA;AACT,QAAA;QAEA,IAAIM,KAAAA,CAAMC,OAAO,CAACH,MAAAA,CAAAA,KAAY,SAASA,MAAAA,CAAOI,MAAM,KAAK,CAAA,EAAG;YAC1D,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOJ,MAAAA,CAAOK,IAAI,CAChB,CAACC,YAAAA,GAAiBA,YAAAA,KAAiBX,KAAAA,IAASA,KAAAA,CAAMY,UAAU,CAAC,CAAA,EAAGD,YAAAA,CAAa,CAAC,CAAC,CAAA,CAAA;IAEnF,CAAA,EACA;AAACxB,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,qBACE0B,cAAA,CAAChC,iCAAAA,EAAAA;QACCO,mBAAAA,EAAqBA,mBAAAA;QACrBC,YAAAA,EAAcA,YAAAA;QACdC,kBAAAA,EAAoBA,kBAAAA;QACpBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,2CAAAA,EAA6CA,2CAAAA;QAC7CC,0CAAAA,EAA4CA,0CAAAA;QAC5CP,eAAAA,EAAiBA,eAAAA;QACjBQ,sBAAAA,EAAwBA,sBAAAA;AAEvBT,QAAAA,QAAAA,EAAAA;;AAGP;;;;;"}
|
|
@@ -1,7 +1,46 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
1
3
|
import { createContext } from '@radix-ui/react-context';
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
// eslint-disable-next-line check-file/filename-naming-convention
|
|
6
|
+
const [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] = createContext('PermissionsDataManager');
|
|
4
7
|
const usePermissionsDataManager = ()=>usePermissionsDataManagerContext('usePermissionsDataManager');
|
|
8
|
+
const PermissionsDataManagerProvider = ({ children, userPermissions, availableConditions, modifiedData, onChangeConditions, onChangeSimpleCheckbox, onChangeParentCheckbox, onChangeCollectionTypeLeftActionRowCheckbox, onChangeCollectionTypeGlobalActionCheckbox })=>{
|
|
9
|
+
const checkUserHasPermission = React.useCallback((action, subject, field)=>{
|
|
10
|
+
if (userPermissions === undefined) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
const matchingPermission = userPermissions.find((perm)=>perm.action === action && perm.subject === subject);
|
|
14
|
+
if (matchingPermission === undefined) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (field === undefined) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
const fields = matchingPermission.properties?.fields;
|
|
21
|
+
if (fields === null || fields === undefined) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (Array.isArray(fields) === false || fields.length === 0) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return fields.some((allowedField)=>allowedField === field || field.startsWith(`${allowedField}.`));
|
|
28
|
+
}, [
|
|
29
|
+
userPermissions
|
|
30
|
+
]);
|
|
31
|
+
return /*#__PURE__*/ jsx(PermissionsDataManagerProviderRaw, {
|
|
32
|
+
availableConditions: availableConditions,
|
|
33
|
+
modifiedData: modifiedData,
|
|
34
|
+
onChangeConditions: onChangeConditions,
|
|
35
|
+
onChangeSimpleCheckbox: onChangeSimpleCheckbox,
|
|
36
|
+
onChangeParentCheckbox: onChangeParentCheckbox,
|
|
37
|
+
onChangeCollectionTypeLeftActionRowCheckbox: onChangeCollectionTypeLeftActionRowCheckbox,
|
|
38
|
+
onChangeCollectionTypeGlobalActionCheckbox: onChangeCollectionTypeGlobalActionCheckbox,
|
|
39
|
+
userPermissions: userPermissions,
|
|
40
|
+
checkUserHasPermission: checkUserHasPermission,
|
|
41
|
+
children: children
|
|
42
|
+
});
|
|
43
|
+
};
|
|
5
44
|
|
|
6
45
|
export { PermissionsDataManagerProvider, usePermissionsDataManager };
|
|
7
46
|
//# sourceMappingURL=usePermissionsDataManager.mjs.map
|
package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissionsDataManager.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.
|
|
1
|
+
{"version":3,"file":"usePermissionsDataManager.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.tsx"],"sourcesContent":["// eslint-disable-next-line check-file/filename-naming-convention\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n userPermissions?: AuthPermission[];\n checkUserHasPermission: (action: string, subject?: string | null, field?: string) => boolean;\n}\n\nconst [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\ninterface PermissionsDataManagerProviderProps\n extends Omit<PermissionsDataManagerContextValue, 'checkUserHasPermission'> {\n children: React.ReactNode;\n}\n\nconst PermissionsDataManagerProvider = ({\n children,\n userPermissions,\n availableConditions,\n modifiedData,\n onChangeConditions,\n onChangeSimpleCheckbox,\n onChangeParentCheckbox,\n onChangeCollectionTypeLeftActionRowCheckbox,\n onChangeCollectionTypeGlobalActionCheckbox,\n}: PermissionsDataManagerProviderProps) => {\n const checkUserHasPermission = React.useCallback(\n (action: string, subject?: string | null, field?: string): boolean => {\n if (userPermissions === undefined) {\n return true;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === action && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return false;\n }\n\n if (field === undefined) {\n return true;\n }\n\n const fields = matchingPermission.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) === false || fields.length === 0) {\n return false;\n }\n\n return fields.some(\n (allowedField) => allowedField === field || field.startsWith(`${allowedField}.`)\n );\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProviderRaw\n availableConditions={availableConditions}\n modifiedData={modifiedData}\n onChangeConditions={onChangeConditions}\n onChangeSimpleCheckbox={onChangeSimpleCheckbox}\n onChangeParentCheckbox={onChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={onChangeCollectionTypeLeftActionRowCheckbox}\n onChangeCollectionTypeGlobalActionCheckbox={onChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n checkUserHasPermission={checkUserHasPermission}\n >\n {children}\n </PermissionsDataManagerProviderRaw>\n );\n};\n\nexport { PermissionsDataManagerProvider };\n"],"names":["PermissionsDataManagerProviderRaw","usePermissionsDataManagerContext","createContext","usePermissionsDataManager","PermissionsDataManagerProvider","children","userPermissions","availableConditions","modifiedData","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","checkUserHasPermission","React","useCallback","action","subject","field","undefined","matchingPermission","find","perm","fields","properties","Array","isArray","length","some","allowedField","startsWith","_jsx"],"mappings":";;;;AAAA;AAsCA,MAAM,CAACA,iCAAAA,EAAmCC,gCAAAA,CAAiC,GACzEC,aAAAA,CAAkD,wBAAA,CAAA;AAE7C,MAAMC,yBAAAA,GAA4B,IACvCF,gCAAAA,CAAiC,2BAAA;AAOnC,MAAMG,8BAAAA,GAAiC,CAAC,EACtCC,QAAQ,EACRC,eAAe,EACfC,mBAAmB,EACnBC,YAAY,EACZC,kBAAkB,EAClBC,sBAAsB,EACtBC,sBAAsB,EACtBC,2CAA2C,EAC3CC,0CAA0C,EACN,GAAA;AACpC,IAAA,MAAMC,yBAAyBC,KAAAA,CAAMC,WAAW,CAC9C,CAACC,QAAgBC,OAAAA,EAAyBC,KAAAA,GAAAA;AACxC,QAAA,IAAIb,oBAAoBc,SAAAA,EAAW;YACjC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,MAAMC,kBAAAA,GAAqBf,eAAAA,CAAgBgB,IAAI,CAC7C,CAACC,IAAAA,GAASA,IAAAA,CAAKN,MAAM,KAAKA,MAAAA,IAAUM,IAAAA,CAAKL,OAAO,KAAKA,OAAAA,CAAAA;AAGvD,QAAA,IAAIG,uBAAuBD,SAAAA,EAAW;YACpC,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,IAAID,UAAUC,SAAAA,EAAW;YACvB,OAAO,IAAA;AACT,QAAA;QAEA,MAAMI,MAAAA,GAASH,kBAAAA,CAAmBI,UAAU,EAAED,MAAAA;QAE9C,IAAIA,MAAAA,KAAW,IAAA,IAAQA,MAAAA,KAAWJ,SAAAA,EAAW;YAC3C,OAAO,IAAA;AACT,QAAA;QAEA,IAAIM,KAAAA,CAAMC,OAAO,CAACH,MAAAA,CAAAA,KAAY,SAASA,MAAAA,CAAOI,MAAM,KAAK,CAAA,EAAG;YAC1D,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOJ,MAAAA,CAAOK,IAAI,CAChB,CAACC,YAAAA,GAAiBA,YAAAA,KAAiBX,KAAAA,IAASA,KAAAA,CAAMY,UAAU,CAAC,CAAA,EAAGD,YAAAA,CAAa,CAAC,CAAC,CAAA,CAAA;IAEnF,CAAA,EACA;AAACxB,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,qBACE0B,GAAA,CAAChC,iCAAAA,EAAAA;QACCO,mBAAAA,EAAqBA,mBAAAA;QACrBC,YAAAA,EAAcA,YAAAA;QACdC,kBAAAA,EAAoBA,kBAAAA;QACpBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,2CAAAA,EAA6CA,2CAAAA;QAC7CC,0CAAAA,EAA4CA,0CAAAA;QAC5CP,eAAAA,EAAiBA,eAAAA;QACjBQ,sBAAAA,EAAwBA,sBAAAA;AAEvBT,QAAAA,QAAAA,EAAAA;;AAGP;;;;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Utility functions for creating permission checkers used in bulk update operations.
|
|
5
|
+
* These functions encapsulate the logic for validating whether a user has permission
|
|
6
|
+
* to modify specific fields/actions during role and app token editing.
|
|
7
|
+
*/ /**
|
|
8
|
+
* Creates a permission checker function for field-level permission validation.
|
|
9
|
+
* Used in bulk update operations to filter which leaves can be modified.
|
|
10
|
+
*
|
|
11
|
+
* @param actionId - The action to check (e.g., 'plugin::content-manager.explorer.create')
|
|
12
|
+
* @param subject - The subject to check (e.g., 'api::article.article'), or null for plugins/settings
|
|
13
|
+
* @param userPermissions - Array of user permissions, or undefined for Role editing mode
|
|
14
|
+
* @returns A checker function that validates if a given path should be allowed,
|
|
15
|
+
* or undefined if in Role editing mode (no restrictions)
|
|
16
|
+
*/ const createFieldPermissionChecker = (actionId, subject, userPermissions)=>{
|
|
17
|
+
if (userPermissions === undefined) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return (path)=>{
|
|
21
|
+
const matchingPerm = userPermissions.find((perm)=>perm.action === actionId && perm.subject === subject);
|
|
22
|
+
if (matchingPerm === undefined) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const fieldsIndex = path.indexOf('fields');
|
|
26
|
+
if (fieldsIndex === -1 || fieldsIndex >= path.length - 1) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
const fieldPath = path.slice(fieldsIndex + 1).join('.');
|
|
30
|
+
const fields = matchingPerm.properties?.fields;
|
|
31
|
+
if (fields === null || fields === undefined) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(fields) && fields.length === 0) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(fields)) {
|
|
38
|
+
return fields.some((allowedField)=>fieldPath === allowedField || fieldPath.startsWith(`${allowedField}.`));
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Creates a permission checker for content type operations where the action ID
|
|
45
|
+
* may need to be extracted from the path itself (for content type name checkboxes).
|
|
46
|
+
*
|
|
47
|
+
* @param subject - The subject to check
|
|
48
|
+
* @param actionIdFromContext - The action ID from parent context (may be undefined)
|
|
49
|
+
* @param userPermissions - Array of user permissions, or undefined for Role editing mode
|
|
50
|
+
* @returns A checker function or undefined if in Role editing mode
|
|
51
|
+
*/ const createDynamicActionPermissionChecker = (subject, actionIdFromContext, userPermissions)=>{
|
|
52
|
+
if (userPermissions === undefined || subject === undefined) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return (path)=>{
|
|
56
|
+
let currentActionId = actionIdFromContext;
|
|
57
|
+
let adjustedPath = path;
|
|
58
|
+
if (currentActionId === undefined && path.length > 0) {
|
|
59
|
+
if (path[0].includes('plugin::') || path[0].includes('admin::')) {
|
|
60
|
+
currentActionId = path[0];
|
|
61
|
+
adjustedPath = path.slice(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (currentActionId === undefined) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const matchingPerm = userPermissions.find((perm)=>perm.action === currentActionId && perm.subject === subject);
|
|
68
|
+
if (matchingPerm === undefined) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const fieldsIndex = adjustedPath.indexOf('fields');
|
|
72
|
+
if (fieldsIndex !== -1 && fieldsIndex < adjustedPath.length - 1) {
|
|
73
|
+
const fieldPath = adjustedPath.slice(fieldsIndex + 1).join('.');
|
|
74
|
+
const fields = matchingPerm.properties?.fields;
|
|
75
|
+
if (fields === null || fields === undefined) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
if (Array.isArray(fields) && fields.length === 0) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return Array.isArray(fields) && fields.some((f)=>fieldPath === f || fieldPath.startsWith(`${f}.`));
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
exports.createDynamicActionPermissionChecker = createDynamicActionPermissionChecker;
|
|
88
|
+
exports.createFieldPermissionChecker = createFieldPermissionChecker;
|
|
89
|
+
//# sourceMappingURL=createPermissionChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPermissionChecker.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.ts"],"sourcesContent":["/**\n * Utility functions for creating permission checkers used in bulk update operations.\n * These functions encapsulate the logic for validating whether a user has permission\n * to modify specific fields/actions during role and app token editing.\n */\n\nimport type { Permission as AuthPermission } from '../../../../../features/Auth';\n\n/**\n * Creates a permission checker function for field-level permission validation.\n * Used in bulk update operations to filter which leaves can be modified.\n *\n * @param actionId - The action to check (e.g., 'plugin::content-manager.explorer.create')\n * @param subject - The subject to check (e.g., 'api::article.article'), or null for plugins/settings\n * @param userPermissions - Array of user permissions, or undefined for Role editing mode\n * @returns A checker function that validates if a given path should be allowed,\n * or undefined if in Role editing mode (no restrictions)\n */\nexport const createFieldPermissionChecker = (\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n): ((path: string[]) => boolean) | undefined => {\n if (userPermissions === undefined) {\n return undefined;\n }\n\n return (path: string[]) => {\n const matchingPerm = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPerm === undefined) {\n return false;\n }\n\n const fieldsIndex = path.indexOf('fields');\n\n if (fieldsIndex === -1 || fieldsIndex >= path.length - 1) {\n return true;\n }\n\n const fieldPath = path.slice(fieldsIndex + 1).join('.');\n const fields = matchingPerm.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) && fields.length === 0) {\n return false;\n }\n\n if (Array.isArray(fields)) {\n return fields.some(\n (allowedField) => fieldPath === allowedField || fieldPath.startsWith(`${allowedField}.`)\n );\n }\n\n return false;\n };\n};\n\n/**\n * Creates a permission checker for content type operations where the action ID\n * may need to be extracted from the path itself (for content type name checkboxes).\n *\n * @param subject - The subject to check\n * @param actionIdFromContext - The action ID from parent context (may be undefined)\n * @param userPermissions - Array of user permissions, or undefined for Role editing mode\n * @returns A checker function or undefined if in Role editing mode\n */\nexport const createDynamicActionPermissionChecker = (\n subject: string | null | undefined,\n actionIdFromContext: string | undefined,\n userPermissions: AuthPermission[] | undefined\n): ((path: string[]) => boolean) | undefined => {\n if (userPermissions === undefined || subject === undefined) {\n return undefined;\n }\n\n return (path: string[]) => {\n let currentActionId = actionIdFromContext;\n let adjustedPath = path;\n\n if (currentActionId === undefined && path.length > 0) {\n if (path[0].includes('plugin::') || path[0].includes('admin::')) {\n currentActionId = path[0];\n adjustedPath = path.slice(1);\n }\n }\n\n if (currentActionId === undefined) {\n return false;\n }\n\n const matchingPerm = userPermissions.find(\n (perm) => perm.action === currentActionId && perm.subject === subject\n );\n\n if (matchingPerm === undefined) {\n return false;\n }\n\n const fieldsIndex = adjustedPath.indexOf('fields');\n\n if (fieldsIndex !== -1 && fieldsIndex < adjustedPath.length - 1) {\n const fieldPath = adjustedPath.slice(fieldsIndex + 1).join('.');\n const fields = matchingPerm.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) && fields.length === 0) {\n return false;\n }\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => fieldPath === f || fieldPath.startsWith(`${f}.`))\n );\n }\n\n return true;\n };\n};\n"],"names":["createFieldPermissionChecker","actionId","subject","userPermissions","undefined","path","matchingPerm","find","perm","action","fieldsIndex","indexOf","length","fieldPath","slice","join","fields","properties","Array","isArray","some","allowedField","startsWith","createDynamicActionPermissionChecker","actionIdFromContext","currentActionId","adjustedPath","includes","f"],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for creating permission checkers used in bulk update operations.
|
|
3
|
+
* These functions encapsulate the logic for validating whether a user has permission
|
|
4
|
+
* to modify specific fields/actions during role and app token editing.
|
|
5
|
+
*/ /**
|
|
6
|
+
* Creates a permission checker function for field-level permission validation.
|
|
7
|
+
* Used in bulk update operations to filter which leaves can be modified.
|
|
8
|
+
*
|
|
9
|
+
* @param actionId - The action to check (e.g., 'plugin::content-manager.explorer.create')
|
|
10
|
+
* @param subject - The subject to check (e.g., 'api::article.article'), or null for plugins/settings
|
|
11
|
+
* @param userPermissions - Array of user permissions, or undefined for Role editing mode
|
|
12
|
+
* @returns A checker function that validates if a given path should be allowed,
|
|
13
|
+
* or undefined if in Role editing mode (no restrictions)
|
|
14
|
+
*/ const createFieldPermissionChecker = (actionId, subject, userPermissions)=>{
|
|
15
|
+
if (userPermissions === undefined) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return (path)=>{
|
|
19
|
+
const matchingPerm = userPermissions.find((perm)=>perm.action === actionId && perm.subject === subject);
|
|
20
|
+
if (matchingPerm === undefined) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const fieldsIndex = path.indexOf('fields');
|
|
24
|
+
if (fieldsIndex === -1 || fieldsIndex >= path.length - 1) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
const fieldPath = path.slice(fieldsIndex + 1).join('.');
|
|
28
|
+
const fields = matchingPerm.properties?.fields;
|
|
29
|
+
if (fields === null || fields === undefined) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (Array.isArray(fields) && fields.length === 0) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(fields)) {
|
|
36
|
+
return fields.some((allowedField)=>fieldPath === allowedField || fieldPath.startsWith(`${allowedField}.`));
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Creates a permission checker for content type operations where the action ID
|
|
43
|
+
* may need to be extracted from the path itself (for content type name checkboxes).
|
|
44
|
+
*
|
|
45
|
+
* @param subject - The subject to check
|
|
46
|
+
* @param actionIdFromContext - The action ID from parent context (may be undefined)
|
|
47
|
+
* @param userPermissions - Array of user permissions, or undefined for Role editing mode
|
|
48
|
+
* @returns A checker function or undefined if in Role editing mode
|
|
49
|
+
*/ const createDynamicActionPermissionChecker = (subject, actionIdFromContext, userPermissions)=>{
|
|
50
|
+
if (userPermissions === undefined || subject === undefined) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return (path)=>{
|
|
54
|
+
let currentActionId = actionIdFromContext;
|
|
55
|
+
let adjustedPath = path;
|
|
56
|
+
if (currentActionId === undefined && path.length > 0) {
|
|
57
|
+
if (path[0].includes('plugin::') || path[0].includes('admin::')) {
|
|
58
|
+
currentActionId = path[0];
|
|
59
|
+
adjustedPath = path.slice(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (currentActionId === undefined) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const matchingPerm = userPermissions.find((perm)=>perm.action === currentActionId && perm.subject === subject);
|
|
66
|
+
if (matchingPerm === undefined) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
const fieldsIndex = adjustedPath.indexOf('fields');
|
|
70
|
+
if (fieldsIndex !== -1 && fieldsIndex < adjustedPath.length - 1) {
|
|
71
|
+
const fieldPath = adjustedPath.slice(fieldsIndex + 1).join('.');
|
|
72
|
+
const fields = matchingPerm.properties?.fields;
|
|
73
|
+
if (fields === null || fields === undefined) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (Array.isArray(fields) && fields.length === 0) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return Array.isArray(fields) && fields.some((f)=>fieldPath === f || fieldPath.startsWith(`${f}.`));
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export { createDynamicActionPermissionChecker, createFieldPermissionChecker };
|
|
86
|
+
//# sourceMappingURL=createPermissionChecker.mjs.map
|