@strapi/admin 4.14.2 → 4.14.3
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/admin/src/content-manager/hooks/useRelation/useRelation.js +1 -0
- package/build/{Admin-authenticatedApp.08f32723.chunk.js → Admin-authenticatedApp.a16cdc37.chunk.js} +1 -1
- package/build/{content-manager.0d2b4a60.chunk.js → content-manager.e1e49cc9.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/{runtime~main.cec66cd9.js → runtime~main.377a22d0.js} +1 -1
- package/dist/server/admin/server/src/bootstrap.d.ts +2 -0
- package/dist/server/admin/server/src/controllers/admin.d.ts +42 -0
- package/dist/server/admin/server/src/controllers/api-token.d.ts +10 -0
- package/dist/server/admin/server/src/controllers/authenticated-user.d.ts +6 -0
- package/dist/server/admin/server/src/controllers/authentication.d.ts +12 -0
- package/dist/server/admin/server/src/controllers/permission.d.ts +13 -0
- package/dist/server/admin/server/src/controllers/role.d.ts +43 -0
- package/dist/server/admin/server/src/controllers/transfer/token.d.ts +9 -0
- package/dist/server/admin/server/src/controllers/user.d.ts +13 -0
- package/dist/server/admin/server/src/destroy.d.ts +2 -0
- package/dist/server/admin/server/src/domain/condition/index.d.ts +56 -0
- package/dist/server/admin/server/src/domain/condition/index.js +53 -0
- package/dist/server/admin/server/src/domain/condition/index.js.map +1 -0
- package/dist/server/admin/server/src/domain/condition/provider.d.ts +30 -0
- package/dist/server/admin/server/src/domain/condition/provider.js +37 -0
- package/dist/server/admin/server/src/domain/condition/provider.js.map +1 -0
- package/dist/server/admin/server/src/index.d.ts +10 -0
- package/dist/server/admin/server/src/middlewares/data-transfer.d.ts +2 -0
- package/dist/server/admin/server/src/services/action.d.ts +9 -0
- package/dist/server/admin/server/src/services/auth.d.ts +42 -0
- package/dist/server/admin/server/src/services/condition.d.ts +2 -0
- package/dist/server/admin/server/src/services/content-type.d.ts +51 -0
- package/dist/server/admin/server/src/services/index.d.ts +61 -0
- package/dist/server/admin/server/src/services/metrics.d.ts +7 -0
- package/dist/server/admin/server/src/services/permission/engine.d.ts +15 -0
- package/dist/server/admin/server/src/services/permission/queries.d.ts +44 -0
- package/dist/server/admin/server/src/services/permission.d.ts +67 -0
- package/dist/server/admin/server/src/services/role.d.ts +116 -0
- package/dist/server/admin/server/src/services/transfer/token.d.ts +103 -0
- package/dist/server/admin/server/src/services/transfer/utils.d.ts +19 -0
- package/dist/server/admin/server/src/services/user.d.ts +96 -0
- package/dist/server/admin/server/src/strategies/admin.d.ts +25 -0
- package/dist/server/admin/server/src/strategies/api-token.d.ts +60 -0
- package/dist/server/admin/server/src/strategies/data-transfer.d.ts +50 -0
- package/dist/server/admin/server/src/validation/common-validators.d.ts +59 -0
- package/dist/server/admin/server/src/validation/permission.d.ts +9 -0
- package/dist/server/bootstrap.d.ts +2 -0
- package/dist/server/bootstrap.js +84 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/config/admin-actions.d.ts +33 -0
- package/dist/server/config/admin-actions.js +219 -0
- package/dist/server/config/admin-actions.js.map +1 -0
- package/dist/server/config/admin-conditions.d.ts +46 -0
- package/dist/server/config/admin-conditions.js +29 -0
- package/dist/server/config/admin-conditions.js.map +1 -0
- package/dist/server/config/email-templates/forgot-password.d.ts +6 -0
- package/dist/server/config/email-templates/forgot-password.js +19 -0
- package/dist/server/config/email-templates/forgot-password.js.map +1 -0
- package/dist/server/config/index.d.ts +17 -0
- package/dist/server/config/index.js +14 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/settings.d.ts +7 -0
- package/dist/server/config/settings.js +11 -0
- package/dist/server/config/settings.js.map +1 -0
- package/dist/server/content-types/Permission.d.ts +62 -0
- package/dist/server/content-types/Permission.js +64 -0
- package/dist/server/content-types/Permission.js.map +1 -0
- package/dist/server/content-types/Role.d.ts +57 -0
- package/dist/server/content-types/Role.js +59 -0
- package/dist/server/content-types/Role.js.map +1 -0
- package/dist/server/content-types/User.d.ts +106 -0
- package/dist/server/content-types/User.js +109 -0
- package/dist/server/content-types/User.js.map +1 -0
- package/dist/server/content-types/api-token-permission.d.ts +35 -0
- package/dist/server/content-types/api-token-permission.js +37 -0
- package/dist/server/content-types/api-token-permission.js.map +1 -0
- package/dist/server/content-types/api-token.d.ts +73 -0
- package/dist/server/content-types/api-token.js +79 -0
- package/dist/server/content-types/api-token.js.map +1 -0
- package/dist/server/content-types/index.d.ts +437 -0
- package/dist/server/content-types/index.js +22 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/transfer-token-permission.d.ts +35 -0
- package/dist/server/content-types/transfer-token-permission.js +37 -0
- package/dist/server/content-types/transfer-token-permission.js.map +1 -0
- package/dist/server/content-types/transfer-token.d.ts +65 -0
- package/dist/server/content-types/transfer-token.js +67 -0
- package/dist/server/content-types/transfer-token.js.map +1 -0
- package/dist/server/controllers/admin.d.ts +42 -0
- package/dist/server/controllers/admin.js +131 -0
- package/dist/server/controllers/admin.js.map +1 -0
- package/dist/server/controllers/api-token.d.ts +10 -0
- package/dist/server/controllers/api-token.js +106 -0
- package/dist/server/controllers/api-token.js.map +1 -0
- package/dist/server/controllers/authenticated-user.d.ts +6 -0
- package/dist/server/controllers/authenticated-user.js +41 -0
- package/dist/server/controllers/authenticated-user.js.map +1 -0
- package/dist/server/controllers/authentication.d.ts +12 -0
- package/dist/server/controllers/authentication.js +130 -0
- package/dist/server/controllers/authentication.js.map +1 -0
- package/dist/server/controllers/content-api.d.ts +5 -0
- package/dist/server/controllers/content-api.js +13 -0
- package/dist/server/controllers/content-api.js.map +1 -0
- package/dist/server/controllers/formatters/conditions.d.ts +3 -0
- package/dist/server/controllers/formatters/conditions.js +9 -0
- package/dist/server/controllers/formatters/conditions.js.map +1 -0
- package/dist/server/controllers/formatters/format-actions-by-sections.d.ts +7 -0
- package/dist/server/controllers/formatters/format-actions-by-sections.js +36 -0
- package/dist/server/controllers/formatters/format-actions-by-sections.js.map +1 -0
- package/dist/server/controllers/formatters/index.d.ts +2 -0
- package/dist/server/controllers/formatters/index.js +11 -0
- package/dist/server/controllers/formatters/index.js.map +1 -0
- package/dist/server/controllers/index.d.ts +68 -0
- package/dist/server/controllers/index.js +51 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/permission.d.ts +13 -0
- package/dist/server/controllers/permission.js +38 -0
- package/dist/server/controllers/permission.js.map +1 -0
- package/dist/server/controllers/role.d.ts +43 -0
- package/dist/server/controllers/role.js +148 -0
- package/dist/server/controllers/role.js.map +1 -0
- package/dist/server/controllers/transfer/index.d.ts +4 -0
- package/dist/server/controllers/transfer/index.js +14 -0
- package/dist/server/controllers/transfer/index.js.map +1 -0
- package/dist/server/controllers/transfer/runner.d.ts +6 -0
- package/dist/server/controllers/transfer/runner.js +25 -0
- package/dist/server/controllers/transfer/runner.js.map +1 -0
- package/dist/server/controllers/transfer/token.d.ts +9 -0
- package/dist/server/controllers/transfer/token.js +100 -0
- package/dist/server/controllers/transfer/token.js.map +1 -0
- package/dist/server/controllers/user.d.ts +13 -0
- package/dist/server/controllers/user.js +105 -0
- package/dist/server/controllers/user.js.map +1 -0
- package/dist/server/controllers/webhooks.d.ts +10 -0
- package/dist/server/controllers/webhooks.js +100 -0
- package/dist/server/controllers/webhooks.js.map +1 -0
- package/dist/server/destroy.d.ts +2 -0
- package/dist/server/destroy.js +9 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/domain/action/index.d.ts +33 -0
- package/dist/server/domain/action/index.js +98 -0
- package/dist/server/domain/action/index.js.map +1 -0
- package/dist/server/domain/action/provider.d.ts +38 -0
- package/dist/server/domain/action/provider.js +66 -0
- package/dist/server/domain/action/provider.js.map +1 -0
- package/dist/server/domain/condition/index.d.ts +53 -0
- package/dist/server/domain/condition/index.js +56 -0
- package/dist/server/domain/condition/index.js.map +1 -0
- package/dist/server/domain/condition/provider.d.ts +30 -0
- package/dist/server/domain/condition/provider.js +37 -0
- package/dist/server/domain/condition/provider.js.map +1 -0
- package/dist/server/domain/permission/index.d.ts +77 -0
- package/dist/server/domain/permission/index.js +119 -0
- package/dist/server/domain/permission/index.js.map +1 -0
- package/dist/server/domain/user.d.ts +32 -0
- package/dist/server/domain/user.js +28 -0
- package/dist/server/domain/user.js.map +1 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +27 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middlewares/data-transfer.d.ts +2 -0
- package/dist/server/middlewares/data-transfer.js +21 -0
- package/dist/server/middlewares/data-transfer.js.map +1 -0
- package/dist/server/middlewares/index.d.ts +9 -0
- package/dist/server/middlewares/index.js +17 -0
- package/dist/server/middlewares/index.js.map +1 -0
- package/dist/server/middlewares/rateLimit.d.ts +5 -0
- package/dist/server/middlewares/rateLimit.js +42 -0
- package/dist/server/middlewares/rateLimit.js.map +1 -0
- package/dist/server/policies/hasPermissions.d.ts +6 -0
- package/dist/server/policies/hasPermissions.js +38 -0
- package/dist/server/policies/hasPermissions.js.map +1 -0
- package/dist/server/policies/index.d.ts +14 -0
- package/dist/server/policies/index.js +10 -0
- package/dist/server/policies/index.js.map +1 -0
- package/dist/server/policies/isAuthenticatedAdmin.d.ts +2 -0
- package/dist/server/policies/isAuthenticatedAdmin.js +6 -0
- package/dist/server/policies/isAuthenticatedAdmin.js.map +1 -0
- package/dist/server/policies/isTelemetryEnabled.d.ts +10 -0
- package/dist/server/policies/isTelemetryEnabled.js +18 -0
- package/dist/server/policies/isTelemetryEnabled.js.map +1 -0
- package/dist/server/register.d.ts +2 -0
- package/dist/server/register.js +18 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/routes/admin.d.ts +23 -0
- package/dist/server/routes/admin.js +72 -0
- package/dist/server/routes/admin.js.map +1 -0
- package/dist/server/routes/api-tokens.d.ts +14 -0
- package/dist/server/routes/api-tokens.js +71 -0
- package/dist/server/routes/api-tokens.js.map +1 -0
- package/dist/server/routes/authentication.d.ts +29 -0
- package/dist/server/routes/authentication.js +58 -0
- package/dist/server/routes/authentication.js.map +1 -0
- package/dist/server/routes/content-api.d.ts +9 -0
- package/dist/server/routes/content-api.js +21 -0
- package/dist/server/routes/content-api.js.map +1 -0
- package/dist/server/routes/index.d.ts +66 -0
- package/dist/server/routes/index.js +32 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/permissions.d.ts +9 -0
- package/dist/server/routes/permissions.js +21 -0
- package/dist/server/routes/permissions.js.map +1 -0
- package/dist/server/routes/roles.d.ts +14 -0
- package/dist/server/routes/roles.js +108 -0
- package/dist/server/routes/roles.js.map +1 -0
- package/dist/server/routes/serve-admin-panel.d.ts +5 -0
- package/dist/server/routes/serve-admin-panel.js +65 -0
- package/dist/server/routes/serve-admin-panel.js.map +1 -0
- package/dist/server/routes/transfer.d.ts +55 -0
- package/dist/server/routes/transfer.js +105 -0
- package/dist/server/routes/transfer.js.map +1 -0
- package/dist/server/routes/users.d.ts +14 -0
- package/dist/server/routes/users.js +89 -0
- package/dist/server/routes/users.js.map +1 -0
- package/dist/server/routes/webhooks.d.ts +14 -0
- package/dist/server/routes/webhooks.js +82 -0
- package/dist/server/routes/webhooks.js.map +1 -0
- package/dist/server/services/action.d.ts +9 -0
- package/dist/server/services/action.js +29 -0
- package/dist/server/services/action.js.map +1 -0
- package/dist/server/services/api-token.d.ts +102 -0
- package/dist/server/services/api-token.js +378 -0
- package/dist/server/services/api-token.js.map +1 -0
- package/dist/server/services/auth.d.ts +42 -0
- package/dist/server/services/auth.js +98 -0
- package/dist/server/services/auth.js.map +1 -0
- package/dist/server/services/condition.d.ts +2 -0
- package/dist/server/services/condition.js +11 -0
- package/dist/server/services/condition.js.map +1 -0
- package/dist/server/services/constants.d.ts +33 -0
- package/dist/server/services/constants.js +37 -0
- package/dist/server/services/constants.js.map +1 -0
- package/dist/server/services/content-type.d.ts +51 -0
- package/dist/server/services/content-type.js +158 -0
- package/dist/server/services/content-type.js.map +1 -0
- package/dist/server/services/index.d.ts +61 -0
- package/dist/server/services/index.js +57 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/metrics.d.ts +7 -0
- package/dist/server/services/metrics.js +37 -0
- package/dist/server/services/metrics.js.map +1 -0
- package/dist/server/services/passport/local-strategy.d.ts +3 -0
- package/dist/server/services/passport/local-strategy.js +28 -0
- package/dist/server/services/passport/local-strategy.js.map +1 -0
- package/dist/server/services/passport.d.ts +7 -0
- package/dist/server/services/passport.js +40 -0
- package/dist/server/services/passport.js.map +1 -0
- package/dist/server/services/permission/engine.d.ts +15 -0
- package/dist/server/services/permission/engine.js +67 -0
- package/dist/server/services/permission/engine.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/index.d.ts +16 -0
- package/dist/server/services/permission/permissions-manager/index.js +48 -0
- package/dist/server/services/permission/permissions-manager/index.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/query-builders.d.ts +3 -0
- package/dist/server/services/permission/permissions-manager/query-builders.js +66 -0
- package/dist/server/services/permission/permissions-manager/query-builders.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/sanitize.d.ts +6 -0
- package/dist/server/services/permission/permissions-manager/sanitize.js +184 -0
- package/dist/server/services/permission/permissions-manager/sanitize.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/validate.d.ts +5 -0
- package/dist/server/services/permission/permissions-manager/validate.js +134 -0
- package/dist/server/services/permission/permissions-manager/validate.js.map +1 -0
- package/dist/server/services/permission/queries.d.ts +44 -0
- package/dist/server/services/permission/queries.js +159 -0
- package/dist/server/services/permission/queries.js.map +1 -0
- package/dist/server/services/permission/sections-builder/builder.d.ts +39 -0
- package/dist/server/services/permission/sections-builder/builder.js +75 -0
- package/dist/server/services/permission/sections-builder/builder.js.map +1 -0
- package/dist/server/services/permission/sections-builder/handlers.d.ts +44 -0
- package/dist/server/services/permission/sections-builder/handlers.js +124 -0
- package/dist/server/services/permission/sections-builder/handlers.js.map +1 -0
- package/dist/server/services/permission/sections-builder/index.d.ts +8 -0
- package/dist/server/services/permission/sections-builder/index.js +39 -0
- package/dist/server/services/permission/sections-builder/index.js.map +1 -0
- package/dist/server/services/permission/sections-builder/section.d.ts +38 -0
- package/dist/server/services/permission/sections-builder/section.js +56 -0
- package/dist/server/services/permission/sections-builder/section.js.map +1 -0
- package/dist/server/services/permission/sections-builder/utils.d.ts +12 -0
- package/dist/server/services/permission/sections-builder/utils.js +23 -0
- package/dist/server/services/permission/sections-builder/utils.js.map +1 -0
- package/dist/server/services/permission.d.ts +67 -0
- package/dist/server/services/permission.js +33 -0
- package/dist/server/services/permission.js.map +1 -0
- package/dist/server/services/project-settings.d.ts +5 -0
- package/dist/server/services/project-settings.js +139 -0
- package/dist/server/services/project-settings.js.map +1 -0
- package/dist/server/services/role.d.ts +116 -0
- package/dist/server/services/role.js +382 -0
- package/dist/server/services/role.js.map +1 -0
- package/dist/server/services/token.d.ts +35 -0
- package/dist/server/services/token.js +58 -0
- package/dist/server/services/token.js.map +1 -0
- package/dist/server/services/transfer/index.d.ts +4 -0
- package/dist/server/services/transfer/index.js +33 -0
- package/dist/server/services/transfer/index.js.map +1 -0
- package/dist/server/services/transfer/permission.d.ts +6 -0
- package/dist/server/services/transfer/permission.js +20 -0
- package/dist/server/services/transfer/permission.js.map +1 -0
- package/dist/server/services/transfer/token.d.ts +84 -0
- package/dist/server/services/transfer/token.js +273 -0
- package/dist/server/services/transfer/token.js.map +1 -0
- package/dist/server/services/transfer/utils.d.ts +13 -0
- package/dist/server/services/transfer/utils.js +29 -0
- package/dist/server/services/transfer/utils.js.map +1 -0
- package/dist/server/services/user.d.ts +96 -0
- package/dist/server/services/user.js +311 -0
- package/dist/server/services/user.js.map +1 -0
- package/dist/server/strategies/admin.d.ts +25 -0
- package/dist/server/strategies/admin.js +44 -0
- package/dist/server/strategies/admin.js.map +1 -0
- package/dist/server/strategies/api-token.d.ts +60 -0
- package/dist/server/strategies/api-token.js +121 -0
- package/dist/server/strategies/api-token.js.map +1 -0
- package/dist/server/strategies/data-transfer.d.ts +66 -0
- package/dist/server/strategies/data-transfer.js +94 -0
- package/dist/server/strategies/data-transfer.js.map +1 -0
- package/dist/server/strategies/index.d.ts +17 -0
- package/dist/server/strategies/index.js +27 -0
- package/dist/server/strategies/index.js.map +1 -0
- package/dist/server/types/src/types/utils/object.d.ts +58 -0
- package/dist/server/types/src/types/utils/object.js +3 -0
- package/dist/server/types/src/types/utils/object.js.map +1 -0
- package/dist/server/utils/index.d.ts +1 -0
- package/dist/server/utils/index.js +9 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/types.d.ts +14 -0
- package/dist/server/utils/types.js +3 -0
- package/dist/server/utils/types.js.map +1 -0
- package/dist/server/validation/action-provider.d.ts +5 -0
- package/dist/server/validation/action-provider.js +58 -0
- package/dist/server/validation/action-provider.js.map +1 -0
- package/dist/server/validation/api-tokens.d.ts +7 -0
- package/dist/server/validation/api-tokens.js +36 -0
- package/dist/server/validation/api-tokens.js.map +1 -0
- package/dist/server/validation/authentication/forgot-password.d.ts +2 -0
- package/dist/server/validation/authentication/forgot-password.js +16 -0
- package/dist/server/validation/authentication/forgot-password.js.map +1 -0
- package/dist/server/validation/authentication/index.d.ts +5 -0
- package/dist/server/validation/authentication/index.js +17 -0
- package/dist/server/validation/authentication/index.js.map +1 -0
- package/dist/server/validation/authentication/register.d.ts +9 -0
- package/dist/server/validation/authentication/register.js +49 -0
- package/dist/server/validation/authentication/register.js.map +1 -0
- package/dist/server/validation/authentication/renew-token.d.ts +2 -0
- package/dist/server/validation/authentication/renew-token.js +6 -0
- package/dist/server/validation/authentication/renew-token.js.map +1 -0
- package/dist/server/validation/authentication/reset-password.d.ts +2 -0
- package/dist/server/validation/authentication/reset-password.js +17 -0
- package/dist/server/validation/authentication/reset-password.js.map +1 -0
- package/dist/server/validation/common-functions/check-fields-are-correctly-nested.d.ts +2 -0
- package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js +26 -0
- package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -0
- package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.d.ts +2 -0
- package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js +18 -0
- package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -0
- package/dist/server/validation/common-functions/index.d.ts +3 -0
- package/dist/server/validation/common-functions/index.js +11 -0
- package/dist/server/validation/common-functions/index.js.map +1 -0
- package/dist/server/validation/common-validators.d.ts +59 -0
- package/dist/server/validation/common-validators.js +162 -0
- package/dist/server/validation/common-validators.js.map +1 -0
- package/dist/server/validation/permission.d.ts +9 -0
- package/dist/server/validation/permission.js +46 -0
- package/dist/server/validation/permission.js.map +1 -0
- package/dist/server/validation/policies/hasPermissions.d.ts +5 -0
- package/dist/server/validation/policies/hasPermissions.js +29 -0
- package/dist/server/validation/policies/hasPermissions.js.map +1 -0
- package/dist/server/validation/project-settings.d.ts +9 -0
- package/dist/server/validation/project-settings.js +44 -0
- package/dist/server/validation/project-settings.js.map +1 -0
- package/dist/server/validation/role.d.ts +11 -0
- package/dist/server/validation/role.js +62 -0
- package/dist/server/validation/role.js.map +1 -0
- package/dist/server/validation/transfer/index.d.ts +1 -0
- package/dist/server/validation/transfer/index.js +9 -0
- package/dist/server/validation/transfer/index.js.map +1 -0
- package/dist/server/validation/transfer/token.d.ts +7 -0
- package/dist/server/validation/transfer/token.js +46 -0
- package/dist/server/validation/transfer/token.js.map +1 -0
- package/dist/server/validation/user.d.ts +117 -0
- package/dist/server/validation/user.js +69 -0
- package/dist/server/validation/user.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates an array of paths to the fields and nested fields, without path nodes
|
|
3
|
+
* @param {string} model model used to get the nested fields
|
|
4
|
+
* @param {Object} options
|
|
5
|
+
* @param {string} options.prefix prefix to add to the path
|
|
6
|
+
* @param {number} options.nestingLevel level of nesting to achieve
|
|
7
|
+
* @param {object} options.components components where components attributes can be found
|
|
8
|
+
* @param {object} options.requiredOnly only returns required nestedFields
|
|
9
|
+
* @param {object} options.existingFields fields that are already selected, meaning that some sub-fields may be required
|
|
10
|
+
* @returns {array<string>}
|
|
11
|
+
* @param model
|
|
12
|
+
*/
|
|
13
|
+
declare const getNestedFields: (model: any, { prefix, nestingLevel, components, requiredOnly, existingFields }: {
|
|
14
|
+
prefix?: string | undefined;
|
|
15
|
+
nestingLevel?: number | undefined;
|
|
16
|
+
components?: {} | undefined;
|
|
17
|
+
requiredOnly?: boolean | undefined;
|
|
18
|
+
existingFields?: never[] | undefined;
|
|
19
|
+
}) => any;
|
|
20
|
+
/**
|
|
21
|
+
* Creates an array of paths to the fields and nested fields, with path nodes
|
|
22
|
+
* @param {string} model model used to get the nested fields
|
|
23
|
+
* @param {Object} options
|
|
24
|
+
* @param {string} options.prefix prefix to add to the path
|
|
25
|
+
* @param {number} options.nestingLevel level of nesting to achieve
|
|
26
|
+
* @param {object} options.components components where components attributes can be found
|
|
27
|
+
* @returns {array<string>}
|
|
28
|
+
*/
|
|
29
|
+
declare const getNestedFieldsWithIntermediate: (model: any, { prefix, nestingLevel, components }: {
|
|
30
|
+
prefix?: string | undefined;
|
|
31
|
+
nestingLevel?: number | undefined;
|
|
32
|
+
components?: {} | undefined;
|
|
33
|
+
}) => any;
|
|
34
|
+
/**
|
|
35
|
+
* Creates an array of permissions with the "properties.fields" attribute filled
|
|
36
|
+
* @param {array} actions array of actions
|
|
37
|
+
* @param {object} options
|
|
38
|
+
* @param {number} options.nestingLevel level of nesting
|
|
39
|
+
* @param {array} options.restrictedSubjects subjectsId to ignore
|
|
40
|
+
* @returns {Permission[]}
|
|
41
|
+
*/
|
|
42
|
+
declare const getPermissionsWithNestedFields: (actions: any[], { nestingLevel, restrictedSubjects }?: any) => any;
|
|
43
|
+
/**
|
|
44
|
+
* Cleans permissions' fields (add required ones, remove the non-existing ones)
|
|
45
|
+
* @param {Permission[]} permissions array of existing permissions in db
|
|
46
|
+
* @param {object} options
|
|
47
|
+
* @param {number} options.nestingLevel level of nesting
|
|
48
|
+
* @returns {Permission[]}
|
|
49
|
+
*/
|
|
50
|
+
declare const cleanPermissionFields: (permissions: any, { nestingLevel }?: any) => any;
|
|
51
|
+
export { getNestedFields, getPermissionsWithNestedFields, cleanPermissionFields, getNestedFieldsWithIntermediate, };
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getNestedFieldsWithIntermediate = exports.cleanPermissionFields = exports.getPermissionsWithNestedFields = exports.getNestedFields = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const fp_1 = require("lodash/fp");
|
|
9
|
+
const utils_1 = require("@strapi/utils");
|
|
10
|
+
const utils_2 = require("../utils");
|
|
11
|
+
const action_1 = __importDefault(require("../domain/action"));
|
|
12
|
+
const permission_1 = __importDefault(require("../domain/permission"));
|
|
13
|
+
/**
|
|
14
|
+
* Creates an array of paths to the fields and nested fields, without path nodes
|
|
15
|
+
* @param {string} model model used to get the nested fields
|
|
16
|
+
* @param {Object} options
|
|
17
|
+
* @param {string} options.prefix prefix to add to the path
|
|
18
|
+
* @param {number} options.nestingLevel level of nesting to achieve
|
|
19
|
+
* @param {object} options.components components where components attributes can be found
|
|
20
|
+
* @param {object} options.requiredOnly only returns required nestedFields
|
|
21
|
+
* @param {object} options.existingFields fields that are already selected, meaning that some sub-fields may be required
|
|
22
|
+
* @returns {array<string>}
|
|
23
|
+
* @param model
|
|
24
|
+
*/
|
|
25
|
+
const getNestedFields = (model, { prefix = '', nestingLevel = 15, components = {}, requiredOnly = false, existingFields = [] }) => {
|
|
26
|
+
if (nestingLevel === 0) {
|
|
27
|
+
return prefix ? [prefix] : [];
|
|
28
|
+
}
|
|
29
|
+
const nonAuthorizableFields = utils_1.contentTypes.getNonVisibleAttributes(model);
|
|
30
|
+
return lodash_1.default.reduce(model.attributes, (fields, attr, key) => {
|
|
31
|
+
if (nonAuthorizableFields.includes(key))
|
|
32
|
+
return fields;
|
|
33
|
+
const fieldPath = prefix ? `${prefix}.${key}` : key;
|
|
34
|
+
const shouldBeIncluded = !requiredOnly || attr.required === true;
|
|
35
|
+
const insideExistingFields = existingFields && existingFields.some((0, fp_1.startsWith)(fieldPath));
|
|
36
|
+
if (attr.type === 'component') {
|
|
37
|
+
if (shouldBeIncluded || insideExistingFields) {
|
|
38
|
+
// @ts-expect-error
|
|
39
|
+
const compoFields = getNestedFields(components[attr.component], {
|
|
40
|
+
nestingLevel: nestingLevel - 1,
|
|
41
|
+
prefix: fieldPath,
|
|
42
|
+
components,
|
|
43
|
+
requiredOnly,
|
|
44
|
+
existingFields,
|
|
45
|
+
});
|
|
46
|
+
if (compoFields.length === 0 && shouldBeIncluded) {
|
|
47
|
+
return fields.concat(fieldPath);
|
|
48
|
+
}
|
|
49
|
+
return fields.concat(compoFields);
|
|
50
|
+
}
|
|
51
|
+
return fields;
|
|
52
|
+
}
|
|
53
|
+
if (shouldBeIncluded) {
|
|
54
|
+
return fields.concat(fieldPath);
|
|
55
|
+
}
|
|
56
|
+
return fields;
|
|
57
|
+
}, []);
|
|
58
|
+
};
|
|
59
|
+
exports.getNestedFields = getNestedFields;
|
|
60
|
+
/**
|
|
61
|
+
* Creates an array of paths to the fields and nested fields, with path nodes
|
|
62
|
+
* @param {string} model model used to get the nested fields
|
|
63
|
+
* @param {Object} options
|
|
64
|
+
* @param {string} options.prefix prefix to add to the path
|
|
65
|
+
* @param {number} options.nestingLevel level of nesting to achieve
|
|
66
|
+
* @param {object} options.components components where components attributes can be found
|
|
67
|
+
* @returns {array<string>}
|
|
68
|
+
*/
|
|
69
|
+
const getNestedFieldsWithIntermediate = (model, { prefix = '', nestingLevel = 15, components = {} }) => {
|
|
70
|
+
if (nestingLevel === 0) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
const nonAuthorizableFields = utils_1.contentTypes.getNonVisibleAttributes(model);
|
|
74
|
+
return lodash_1.default.reduce(model.attributes, (fields, attr, key) => {
|
|
75
|
+
if (nonAuthorizableFields.includes(key))
|
|
76
|
+
return fields;
|
|
77
|
+
const fieldPath = prefix ? `${prefix}.${key}` : key;
|
|
78
|
+
fields.push(fieldPath);
|
|
79
|
+
if (attr.type === 'component') {
|
|
80
|
+
// @ts-expect-error
|
|
81
|
+
const compoFields = getNestedFieldsWithIntermediate(components[attr.component], {
|
|
82
|
+
nestingLevel: nestingLevel - 1,
|
|
83
|
+
prefix: fieldPath,
|
|
84
|
+
components,
|
|
85
|
+
});
|
|
86
|
+
fields.push(...compoFields);
|
|
87
|
+
}
|
|
88
|
+
return fields;
|
|
89
|
+
}, []);
|
|
90
|
+
};
|
|
91
|
+
exports.getNestedFieldsWithIntermediate = getNestedFieldsWithIntermediate;
|
|
92
|
+
/**
|
|
93
|
+
* Creates an array of permissions with the "properties.fields" attribute filled
|
|
94
|
+
* @param {array} actions array of actions
|
|
95
|
+
* @param {object} options
|
|
96
|
+
* @param {number} options.nestingLevel level of nesting
|
|
97
|
+
* @param {array} options.restrictedSubjects subjectsId to ignore
|
|
98
|
+
* @returns {Permission[]}
|
|
99
|
+
*/
|
|
100
|
+
const getPermissionsWithNestedFields = (actions, { nestingLevel, restrictedSubjects = [] } = {}) => {
|
|
101
|
+
return actions.reduce((permissions, action) => {
|
|
102
|
+
const validSubjects = action.subjects.filter((subject) => !restrictedSubjects.includes(subject));
|
|
103
|
+
// Create a Permission for each subject (content-type uid) within the action
|
|
104
|
+
for (const subject of validSubjects) {
|
|
105
|
+
const fields = action_1.default.appliesToProperty('fields', action)
|
|
106
|
+
? getNestedFields(strapi.contentTypes[subject], {
|
|
107
|
+
components: strapi.components,
|
|
108
|
+
nestingLevel,
|
|
109
|
+
})
|
|
110
|
+
: undefined;
|
|
111
|
+
const permission = permission_1.default.create({
|
|
112
|
+
action: action.actionId,
|
|
113
|
+
subject,
|
|
114
|
+
properties: { fields },
|
|
115
|
+
});
|
|
116
|
+
permissions.push(permission);
|
|
117
|
+
}
|
|
118
|
+
return permissions;
|
|
119
|
+
}, []);
|
|
120
|
+
};
|
|
121
|
+
exports.getPermissionsWithNestedFields = getPermissionsWithNestedFields;
|
|
122
|
+
/**
|
|
123
|
+
* Cleans permissions' fields (add required ones, remove the non-existing ones)
|
|
124
|
+
* @param {Permission[]} permissions array of existing permissions in db
|
|
125
|
+
* @param {object} options
|
|
126
|
+
* @param {number} options.nestingLevel level of nesting
|
|
127
|
+
* @returns {Permission[]}
|
|
128
|
+
*/
|
|
129
|
+
const cleanPermissionFields = (permissions, { nestingLevel } = {}) => {
|
|
130
|
+
const { actionProvider } = (0, utils_2.getService)('permission');
|
|
131
|
+
return permissions.map((permission) => {
|
|
132
|
+
const { action: actionId, subject, properties: { fields }, } = permission;
|
|
133
|
+
const action = actionProvider.get(actionId);
|
|
134
|
+
// todo see if it's possible to check property on action + subject (async)
|
|
135
|
+
if (!action_1.default.appliesToProperty('fields', action)) {
|
|
136
|
+
return permission_1.default.deleteProperty('fields', permission);
|
|
137
|
+
}
|
|
138
|
+
if (!subject || !strapi.contentTypes[subject]) {
|
|
139
|
+
return permission;
|
|
140
|
+
}
|
|
141
|
+
const possibleFields = getNestedFieldsWithIntermediate(strapi.contentTypes[subject], {
|
|
142
|
+
components: strapi.components,
|
|
143
|
+
nestingLevel,
|
|
144
|
+
});
|
|
145
|
+
const requiredFields = getNestedFields(strapi.contentTypes[subject], {
|
|
146
|
+
components: strapi.components,
|
|
147
|
+
requiredOnly: true,
|
|
148
|
+
nestingLevel,
|
|
149
|
+
existingFields: fields,
|
|
150
|
+
});
|
|
151
|
+
// @ts-expect-error
|
|
152
|
+
const badNestedFields = (0, fp_1.uniq)([...(0, fp_1.intersection)(fields, possibleFields), ...requiredFields]);
|
|
153
|
+
const newFields = badNestedFields.filter((field) => !badNestedFields.some((0, fp_1.startsWith)(`${field}.`)));
|
|
154
|
+
return permission_1.default.setProperty('fields', newFields, permission);
|
|
155
|
+
}, []);
|
|
156
|
+
};
|
|
157
|
+
exports.cleanPermissionFields = cleanPermissionFields;
|
|
158
|
+
//# sourceMappingURL=content-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-type.js","sourceRoot":"","sources":["../../../server/src/services/content-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as user from './user';
|
|
2
|
+
import * as token from './token';
|
|
3
|
+
import * as role from './role';
|
|
4
|
+
import * as permission from './permission';
|
|
5
|
+
import * as passport from './passport';
|
|
6
|
+
import * as metrics from './metrics';
|
|
7
|
+
import * as contentType from './content-type';
|
|
8
|
+
import * as condition from './condition';
|
|
9
|
+
import * as auth from './auth';
|
|
10
|
+
import * as action from './action';
|
|
11
|
+
import * as apiToken from './api-token';
|
|
12
|
+
import * as transfer from './transfer';
|
|
13
|
+
import * as projectSettings from './project-settings';
|
|
14
|
+
declare const _default: {
|
|
15
|
+
user: typeof user;
|
|
16
|
+
token: typeof token;
|
|
17
|
+
role: typeof role;
|
|
18
|
+
permission: typeof permission;
|
|
19
|
+
passport: typeof passport;
|
|
20
|
+
metrics: typeof metrics;
|
|
21
|
+
'content-type': typeof contentType;
|
|
22
|
+
constants: {
|
|
23
|
+
CONTENT_TYPE_SECTION: string;
|
|
24
|
+
SUPER_ADMIN_CODE: string;
|
|
25
|
+
EDITOR_CODE: string;
|
|
26
|
+
AUTHOR_CODE: string;
|
|
27
|
+
READ_ACTION: string;
|
|
28
|
+
CREATE_ACTION: string;
|
|
29
|
+
UPDATE_ACTION: string;
|
|
30
|
+
DELETE_ACTION: string;
|
|
31
|
+
PUBLISH_ACTION: string;
|
|
32
|
+
API_TOKEN_TYPE: {
|
|
33
|
+
READ_ONLY: string;
|
|
34
|
+
FULL_ACCESS: string;
|
|
35
|
+
CUSTOM: string;
|
|
36
|
+
};
|
|
37
|
+
API_TOKEN_LIFESPANS: {
|
|
38
|
+
UNLIMITED: null;
|
|
39
|
+
DAYS_7: number;
|
|
40
|
+
DAYS_30: number;
|
|
41
|
+
DAYS_90: number;
|
|
42
|
+
};
|
|
43
|
+
TRANSFER_TOKEN_TYPE: {
|
|
44
|
+
PUSH: string;
|
|
45
|
+
PULL: string;
|
|
46
|
+
};
|
|
47
|
+
TRANSFER_TOKEN_LIFESPANS: {
|
|
48
|
+
UNLIMITED: null;
|
|
49
|
+
DAYS_7: number;
|
|
50
|
+
DAYS_30: number;
|
|
51
|
+
DAYS_90: number;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
condition: typeof condition;
|
|
55
|
+
auth: typeof auth;
|
|
56
|
+
action: typeof action;
|
|
57
|
+
'api-token': typeof apiToken;
|
|
58
|
+
transfer: typeof transfer;
|
|
59
|
+
'project-settings': typeof projectSettings;
|
|
60
|
+
};
|
|
61
|
+
export default _default;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const user = __importStar(require("./user"));
|
|
27
|
+
const token = __importStar(require("./token"));
|
|
28
|
+
const role = __importStar(require("./role"));
|
|
29
|
+
const permission = __importStar(require("./permission"));
|
|
30
|
+
const passport = __importStar(require("./passport"));
|
|
31
|
+
const metrics = __importStar(require("./metrics"));
|
|
32
|
+
const contentType = __importStar(require("./content-type"));
|
|
33
|
+
const constants = __importStar(require("./constants"));
|
|
34
|
+
const condition = __importStar(require("./condition"));
|
|
35
|
+
const auth = __importStar(require("./auth"));
|
|
36
|
+
const action = __importStar(require("./action"));
|
|
37
|
+
const apiToken = __importStar(require("./api-token"));
|
|
38
|
+
const transfer = __importStar(require("./transfer"));
|
|
39
|
+
const projectSettings = __importStar(require("./project-settings"));
|
|
40
|
+
// TODO: TS - Export services one by one as this export is cjs
|
|
41
|
+
exports.default = {
|
|
42
|
+
user,
|
|
43
|
+
token,
|
|
44
|
+
role,
|
|
45
|
+
permission,
|
|
46
|
+
passport,
|
|
47
|
+
metrics,
|
|
48
|
+
'content-type': contentType,
|
|
49
|
+
constants,
|
|
50
|
+
condition,
|
|
51
|
+
auth,
|
|
52
|
+
action,
|
|
53
|
+
'api-token': apiToken,
|
|
54
|
+
transfer,
|
|
55
|
+
'project-settings': projectSettings,
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,+CAAiC;AACjC,6CAA+B;AAC/B,yDAA2C;AAC3C,qDAAuC;AACvC,mDAAqC;AACrC,4DAA8C;AAC9C,uDAAyC;AACzC,uDAAyC;AACzC,6CAA+B;AAC/B,iDAAmC;AACnC,sDAAwC;AACxC,qDAAuC;AACvC,oEAAsD;AAEtD,8DAA8D;AAC9D,kBAAe;IACb,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,OAAO;IACP,cAAc,EAAE,WAAW;IAC3B,SAAS;IACT,SAAS;IACT,IAAI;IACJ,MAAM;IACN,WAAW,EAAE,QAAQ;IACrB,QAAQ;IACR,kBAAkB,EAAE,eAAe;CACpC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Strapi } from '@strapi/types';
|
|
2
|
+
declare const sendDidInviteUser: () => Promise<void>;
|
|
3
|
+
declare const sendDidUpdateRolePermissions: () => Promise<void>;
|
|
4
|
+
declare const sendDidChangeInterfaceLanguage: () => Promise<void>;
|
|
5
|
+
declare const sendUpdateProjectInformation: () => Promise<void>;
|
|
6
|
+
declare const startCron: (strapi: Strapi) => void;
|
|
7
|
+
export { sendDidInviteUser, sendDidUpdateRolePermissions, sendDidChangeInterfaceLanguage, sendUpdateProjectInformation, startCron, };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startCron = exports.sendUpdateProjectInformation = exports.sendDidChangeInterfaceLanguage = exports.sendDidUpdateRolePermissions = exports.sendDidInviteUser = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const sendDidInviteUser = async () => {
|
|
6
|
+
const numberOfUsers = await (0, utils_1.getService)('user').count();
|
|
7
|
+
const numberOfRoles = await (0, utils_1.getService)('role').count();
|
|
8
|
+
strapi.telemetry.send('didInviteUser', {
|
|
9
|
+
groupProperties: { numberOfRoles, numberOfUsers },
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
exports.sendDidInviteUser = sendDidInviteUser;
|
|
13
|
+
const sendDidUpdateRolePermissions = async () => {
|
|
14
|
+
strapi.telemetry.send('didUpdateRolePermissions');
|
|
15
|
+
};
|
|
16
|
+
exports.sendDidUpdateRolePermissions = sendDidUpdateRolePermissions;
|
|
17
|
+
const sendDidChangeInterfaceLanguage = async () => {
|
|
18
|
+
const languagesInUse = await (0, utils_1.getService)('user').getLanguagesInUse();
|
|
19
|
+
// This event is anonymous
|
|
20
|
+
strapi.telemetry.send('didChangeInterfaceLanguage', { userProperties: { languagesInUse } });
|
|
21
|
+
};
|
|
22
|
+
exports.sendDidChangeInterfaceLanguage = sendDidChangeInterfaceLanguage;
|
|
23
|
+
const sendUpdateProjectInformation = async () => {
|
|
24
|
+
const numberOfActiveAdminUsers = await (0, utils_1.getService)('user').count({ isActive: true });
|
|
25
|
+
const numberOfAdminUsers = await (0, utils_1.getService)('user').count();
|
|
26
|
+
strapi.telemetry.send('didUpdateProjectInformation', {
|
|
27
|
+
groupProperties: { numberOfActiveAdminUsers, numberOfAdminUsers },
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
exports.sendUpdateProjectInformation = sendUpdateProjectInformation;
|
|
31
|
+
const startCron = (strapi) => {
|
|
32
|
+
strapi.cron.add({
|
|
33
|
+
'0 0 0 * * *': () => sendUpdateProjectInformation(),
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
exports.startCron = startCron;
|
|
37
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../server/src/services/metrics.ts"],"names":[],"mappings":";;;AACA,oCAAsC;AAEtC,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;IACnC,MAAM,aAAa,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACvD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE;QACrC,eAAe,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE;KAClD,CAAC,CAAC;AACL,CAAC,CAAC;AA4BA,8CAAiB;AA1BnB,MAAM,4BAA4B,GAAG,KAAK,IAAI,EAAE;IAC9C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACpD,CAAC,CAAC;AAyBA,oEAA4B;AAvB9B,MAAM,8BAA8B,GAAG,KAAK,IAAI,EAAE;IAChD,MAAM,cAAc,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACpE,0BAA0B;IAC1B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC;AAoBA,wEAA8B;AAlBhC,MAAM,4BAA4B,GAAG,KAAK,IAAI,EAAE;IAC9C,MAAM,wBAAwB,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,kBAAkB,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,EAAE;QACnD,eAAe,EAAE,EAAE,wBAAwB,EAAE,kBAAkB,EAAE;KAClE,CAAC,CAAC;AACL,CAAC,CAAC;AAYA,oEAA4B;AAV9B,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;IACnC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACd,aAAa,EAAE,GAAG,EAAE,CAAC,4BAA4B,EAAE;KACpD,CAAC,CAAC;AACL,CAAC,CAAC;AAOA,8BAAS"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fp_1 = require("lodash/fp");
|
|
4
|
+
// @ts-expect-error
|
|
5
|
+
const passport_local_1 = require("passport-local");
|
|
6
|
+
const createLocalStrategy = (strapi, middleware) => {
|
|
7
|
+
return new passport_local_1.Strategy({
|
|
8
|
+
usernameField: 'email',
|
|
9
|
+
passwordField: 'password',
|
|
10
|
+
session: false,
|
|
11
|
+
}, (email, password, done) => {
|
|
12
|
+
return (
|
|
13
|
+
// @ts-expect-error
|
|
14
|
+
strapi.admin.services.auth
|
|
15
|
+
.checkCredentials({ email: (0, fp_1.toLower)(email), password })
|
|
16
|
+
// @ts-expect-error
|
|
17
|
+
.then(async ([error, user, message]) => {
|
|
18
|
+
if (middleware) {
|
|
19
|
+
return middleware([error, user, message], done);
|
|
20
|
+
}
|
|
21
|
+
return done(error, user, message);
|
|
22
|
+
})
|
|
23
|
+
// @ts-expect-error
|
|
24
|
+
.catch((error) => done(error)));
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
exports.default = createLocalStrategy;
|
|
28
|
+
//# sourceMappingURL=local-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-strategy.js","sourceRoot":"","sources":["../../../../server/src/services/passport/local-strategy.ts"],"names":[],"mappings":";;AAAA,kCAAoC;AACpC,mBAAmB;AACnB,mDAA2D;AAG3D,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,UAAgB,EAAE,EAAE;IAC/D,OAAO,IAAI,yBAAa,CACtB;QACE,aAAa,EAAE,OAAO;QACtB,aAAa,EAAE,UAAU;QACzB,OAAO,EAAE,KAAK;KACf,EACD,CAAC,KAAU,EAAE,QAAa,EAAE,IAAS,EAAE,EAAE;QACvC,OAAO;QACL,mBAAmB;QACnB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;aACvB,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAA,YAAO,EAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;YACtD,mBAAmB;aAClB,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;YACrC,IAAI,UAAU,EAAE;gBACd,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;aACjD;YAED,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC;YACF,mBAAmB;aAClB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACjC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.authEventsMapper = exports.getPassportStrategies = exports.init = void 0;
|
|
7
|
+
// @ts-expect-error
|
|
8
|
+
const koa_passport_1 = __importDefault(require("koa-passport"));
|
|
9
|
+
const fp_1 = require("lodash/fp");
|
|
10
|
+
const local_strategy_1 = __importDefault(require("./passport/local-strategy"));
|
|
11
|
+
const authEventsMapper = {
|
|
12
|
+
onConnectionSuccess: 'admin.auth.success',
|
|
13
|
+
onConnectionError: 'admin.auth.error',
|
|
14
|
+
};
|
|
15
|
+
exports.authEventsMapper = authEventsMapper;
|
|
16
|
+
const valueIsFunctionType = ([, value]) => (0, fp_1.isFunction)(value);
|
|
17
|
+
const keyIsValidEventName = ([key]) => {
|
|
18
|
+
return Object.keys(strapi.admin.services.passport.authEventsMapper).includes(key);
|
|
19
|
+
};
|
|
20
|
+
const getPassportStrategies = () => [(0, local_strategy_1.default)(strapi)];
|
|
21
|
+
exports.getPassportStrategies = getPassportStrategies;
|
|
22
|
+
const registerAuthEvents = () => {
|
|
23
|
+
const { events = {} } = strapi.config.get('admin.auth', {});
|
|
24
|
+
const { authEventsMapper } = strapi.admin.services.passport;
|
|
25
|
+
const eventList = Object.entries(events)
|
|
26
|
+
.filter(keyIsValidEventName)
|
|
27
|
+
.filter(valueIsFunctionType);
|
|
28
|
+
for (const [eventName, handler] of eventList) {
|
|
29
|
+
strapi.eventHub.on(authEventsMapper[eventName], handler);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const init = () => {
|
|
33
|
+
strapi.admin.services.passport
|
|
34
|
+
.getPassportStrategies()
|
|
35
|
+
.forEach((strategy) => koa_passport_1.default.use(strategy));
|
|
36
|
+
registerAuthEvents();
|
|
37
|
+
return koa_passport_1.default.initialize();
|
|
38
|
+
};
|
|
39
|
+
exports.init = init;
|
|
40
|
+
//# sourceMappingURL=passport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passport.js","sourceRoot":"","sources":["../../../server/src/services/passport.ts"],"names":[],"mappings":";;;;;;AAAA,mBAAmB;AACnB,gEAAoC;AACpC,kCAAuC;AAEvC,+EAA4D;AAE5D,MAAM,gBAAgB,GAAG;IACvB,mBAAmB,EAAE,oBAAoB;IACzC,iBAAiB,EAAE,kBAAkB;CACtC,CAAC;AAgCoC,4CAAgB;AA9BtD,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAAE,KAAK,CAAM,EAAE,EAAE,CAAC,IAAA,eAAU,EAAC,KAAK,CAAC,CAAC;AAClE,MAAM,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAM,EAAE,EAAE;IACzC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,CAAC,IAAA,wBAAmB,EAAC,MAAM,CAAC,CAAC,CAAC;AAyBnD,sDAAqB;AAvBpC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAC9B,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAQ,CAAC;IACnE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAE5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACrC,MAAM,CAAC,mBAAmB,CAAC;SAC3B,MAAM,CAAC,mBAAmB,CAAQ,CAAC;IAEtC,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE;QAC5C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;KAC1D;AACH,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,GAAG,EAAE;IAChB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ;SAC3B,qBAAqB,EAAE;SACvB,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE,CAAC,sBAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD,kBAAkB,EAAE,CAAC;IAErB,OAAO,sBAAQ,CAAC,UAAU,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEO,oBAAI"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="lodash" />
|
|
2
|
+
declare const _default: (params: any) => {
|
|
3
|
+
readonly hooks: import("@strapi/permissions/dist/engine/hooks").PermissionEngineHooks;
|
|
4
|
+
/**
|
|
5
|
+
* Generate an ability based on the given user (using associated roles & permissions)
|
|
6
|
+
* @param user
|
|
7
|
+
* @returns {Promise<Ability>}
|
|
8
|
+
*/
|
|
9
|
+
generateUserAbility(user: any): Promise<import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>>;
|
|
10
|
+
/**
|
|
11
|
+
* Check many permissions based on an ability
|
|
12
|
+
*/
|
|
13
|
+
checkMany: import("lodash").CurriedFunction2<any, any, any>;
|
|
14
|
+
};
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fp_1 = require("lodash/fp");
|
|
7
|
+
const permissions_1 = __importDefault(require("@strapi/permissions"));
|
|
8
|
+
const index_1 = __importDefault(require("../../domain/permission/index"));
|
|
9
|
+
const utils_1 = require("../../utils");
|
|
10
|
+
exports.default = (params) => {
|
|
11
|
+
const { providers } = params;
|
|
12
|
+
const engine = permissions_1.default.engine
|
|
13
|
+
.new({ providers })
|
|
14
|
+
/**
|
|
15
|
+
* Validate the permission's action exists in the action registry
|
|
16
|
+
*/
|
|
17
|
+
.on('before-format::validate.permission', ({ permission }) => {
|
|
18
|
+
const action = providers.action.get(permission.action);
|
|
19
|
+
// If the action isn't registered into the action provider, then ignore the permission
|
|
20
|
+
if (!action) {
|
|
21
|
+
strapi.log.debug(`Unknown action "${permission.action}" supplied when registering a new permission in engine`);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
/**
|
|
26
|
+
* Remove invalid properties from the permission based on the action (applyToProperties)
|
|
27
|
+
*/
|
|
28
|
+
.on('format.permission', (permission) => {
|
|
29
|
+
const action = providers.action.get(permission.action);
|
|
30
|
+
const properties = permission.properties || {};
|
|
31
|
+
// Only keep the properties allowed by the action (action.applyToProperties)
|
|
32
|
+
const propertiesName = Object.keys(properties);
|
|
33
|
+
const invalidProperties = (0, fp_1.difference)(propertiesName, action.applyToProperties || propertiesName);
|
|
34
|
+
const permissionWithSanitizedProperties = invalidProperties.reduce((property) => index_1.default.deleteProperty(property, permission), permission);
|
|
35
|
+
return permissionWithSanitizedProperties;
|
|
36
|
+
})
|
|
37
|
+
/**
|
|
38
|
+
* Ignore the permission if the fields property is an empty array (access to no field)
|
|
39
|
+
*/
|
|
40
|
+
.on('after-format::validate.permission', ({ permission }) => {
|
|
41
|
+
const { fields } = permission.properties;
|
|
42
|
+
if ((0, fp_1.isArray)(fields) && (0, fp_1.isEmpty)(fields)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
get hooks() {
|
|
48
|
+
return engine.hooks;
|
|
49
|
+
},
|
|
50
|
+
/**
|
|
51
|
+
* Generate an ability based on the given user (using associated roles & permissions)
|
|
52
|
+
* @param user
|
|
53
|
+
* @returns {Promise<Ability>}
|
|
54
|
+
*/
|
|
55
|
+
async generateUserAbility(user) {
|
|
56
|
+
const permissions = (await (0, utils_1.getService)('permission').findUserPermissions(user));
|
|
57
|
+
return engine.generateAbility(permissions, user);
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* Check many permissions based on an ability
|
|
61
|
+
*/
|
|
62
|
+
checkMany: (0, fp_1.curry)((ability, permissions) => {
|
|
63
|
+
return permissions.map(({ action, subject, field }) => ability.can(action, subject, field));
|
|
64
|
+
}),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../server/src/services/permission/engine.ts"],"names":[],"mappings":";;;;;AAAA,kCAAgE;AAChE,sEAA8C;AAE9C,0EAA6D;AAC7D,uCAAyC;AAEzC,kBAAe,CAAC,MAAW,EAAE,EAAE;IAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,MAAM,MAAM,GAAG,qBAAW,CAAC,MAAM;SAC9B,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;QACnB;;WAEG;SACF,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEvD,sFAAsF;QACtF,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,CAAC,GAAG,CAAC,KAAK,CACd,mBAAmB,UAAU,CAAC,MAAM,wDAAwD,CAC7F,CAAC;YACF,OAAO,KAAK,CAAC;SACd;IACH,CAAC,CAAC;QAEF;;WAEG;SACF,EAAE,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;QAE/C,4EAA4E;QAC5E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,iBAAiB,GAAG,IAAA,eAAU,EAClC,cAAc,EACd,MAAM,CAAC,iBAAiB,IAAI,cAAc,CAC3C,CAAC;QAEF,MAAM,iCAAiC,GAAG,iBAAiB,CAAC,MAAM,CAChE,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAgB,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,EACnE,UAAU,CACX,CAAC;QAEF,OAAO,iCAAiC,CAAC;IAC3C,CAAC,CAAC;QAEF;;WAEG;SACF,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC;QAEzC,IAAI,IAAA,YAAO,EAAC,MAAM,CAAC,IAAI,IAAA,YAAO,EAAC,MAAM,CAAC,EAAE;YACtC,OAAO,KAAK,CAAC;SACd;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,IAAI,KAAK;YACP,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QAED;;;;WAIG;QACH,KAAK,CAAC,mBAAmB,CAAC,IAAS;YACjC,MAAM,WAAW,GAAG,CAAC,MAAM,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAQ,CAAC;YAEtF,OAAO,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED;;WAEG;QACH,SAAS,EAAE,IAAA,UAAK,EAAC,CAAC,OAAY,EAAE,WAAgB,EAAE,EAAE;YAClD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAO,EAAE,EAAE,CACzD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare const _default: ({ ability, action, model }: any) => {
|
|
2
|
+
validateQuery: (data: any, options?: {}) => any;
|
|
3
|
+
validateInput: (data: any, options?: {}) => any;
|
|
4
|
+
sanitizeOutput: (data: any, options?: any) => any;
|
|
5
|
+
sanitizeInput: (data: any, options?: any) => any;
|
|
6
|
+
sanitizeQuery: (data: any, options?: any) => any;
|
|
7
|
+
ability: any;
|
|
8
|
+
action: any;
|
|
9
|
+
model: any;
|
|
10
|
+
isAllowed: any;
|
|
11
|
+
toSubject(target: any, subjectType?: any): any;
|
|
12
|
+
pickPermittedFieldsOf(data: any, options?: {}): any;
|
|
13
|
+
getQuery(queryAction?: any): any;
|
|
14
|
+
addPermissionsQueryTo(query: any, action: any): any;
|
|
15
|
+
};
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* eslint-disable @typescript-eslint/default-param-last */
|
|
7
|
+
const _ = require("lodash");
|
|
8
|
+
const fp_1 = require("lodash/fp");
|
|
9
|
+
const ability_1 = require("@casl/ability");
|
|
10
|
+
const sanitize_1 = __importDefault(require("./sanitize"));
|
|
11
|
+
const validate_1 = __importDefault(require("./validate"));
|
|
12
|
+
const query_builders_1 = require("./query-builders");
|
|
13
|
+
exports.default = ({ ability, action, model }) => ({
|
|
14
|
+
ability,
|
|
15
|
+
action,
|
|
16
|
+
model,
|
|
17
|
+
get isAllowed() {
|
|
18
|
+
return this.ability.can(action, model);
|
|
19
|
+
},
|
|
20
|
+
toSubject(target, subjectType = model) {
|
|
21
|
+
return (0, ability_1.subject)(subjectType, target);
|
|
22
|
+
},
|
|
23
|
+
pickPermittedFieldsOf(data, options = {}) {
|
|
24
|
+
return this.sanitizeInput(data, options);
|
|
25
|
+
},
|
|
26
|
+
getQuery(queryAction = action) {
|
|
27
|
+
if (_.isUndefined(queryAction)) {
|
|
28
|
+
throw new Error('Action must be defined to build a permission query');
|
|
29
|
+
}
|
|
30
|
+
return (0, query_builders_1.buildStrapiQuery)((0, query_builders_1.buildCaslQuery)(ability, queryAction, model));
|
|
31
|
+
},
|
|
32
|
+
addPermissionsQueryTo(query = {}, action) {
|
|
33
|
+
const newQuery = (0, fp_1.cloneDeep)(query);
|
|
34
|
+
const permissionQuery = this.getQuery(action) ?? undefined;
|
|
35
|
+
if ((0, fp_1.isPlainObject)(query.filters)) {
|
|
36
|
+
newQuery.filters = permissionQuery
|
|
37
|
+
? { $and: [query.filters, permissionQuery] }
|
|
38
|
+
: query.filters;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
newQuery.filters = permissionQuery;
|
|
42
|
+
}
|
|
43
|
+
return newQuery;
|
|
44
|
+
},
|
|
45
|
+
...(0, sanitize_1.default)({ action, ability, model }),
|
|
46
|
+
...(0, validate_1.default)({ action, ability, model }),
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../server/src/services/permission/permissions-manager/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAA0D;AAC1D,4BAA6B;AAC7B,kCAAqD;AACrD,2CAAqD;AACrD,0DAA+C;AAC/C,0DAA+C;AAE/C,qDAAoE;AAEpE,kBAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAO,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO;IACP,MAAM;IACN,KAAK;IAEL,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,MAAW,EAAE,WAAW,GAAG,KAAK;QACxC,OAAO,IAAA,iBAAS,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB,CAAC,IAAS,EAAE,OAAO,GAAG,EAAE;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,WAAW,GAAG,MAAM;QAC3B,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;SACvE;QAED,OAAO,IAAA,iCAAgB,EAAC,IAAA,+BAAc,EAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,qBAAqB,CAAC,QAAQ,EAAS,EAAE,MAAW;QAClD,MAAM,QAAQ,GAAG,IAAA,cAAS,EAAC,KAAK,CAAC,CAAC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAE3D,IAAI,IAAA,kBAAa,EAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAChC,QAAQ,CAAC,OAAO,GAAG,eAAe;gBAChC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;gBAC5C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;SACnB;aAAM;YACL,QAAQ,CAAC,OAAO,GAAG,eAAe,CAAC;SACpC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,GAAG,IAAA,kBAAqB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpD,GAAG,IAAA,kBAAqB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;CACrD,CAAC,CAAC"}
|