@webiny/api-headless-cms 6.1.0-beta.3 → 6.2.0-beta.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/context.d.ts +2 -5
- package/context.js +16 -7
- package/context.js.map +1 -1
- package/crud/AccessControl/AccessControl.d.ts +18 -28
- package/crud/AccessControl/AccessControl.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.js +17 -6
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +9 -3
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.d.ts +1 -1
- package/crud/contentEntry/entryDataValidation.js +16 -13
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +2 -3
- package/crud/contentEntry/searchableFields.js +10 -18
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentModel.crud.js +2 -1
- package/crud/contentModel.crud.js.map +1 -1
- package/domain/contentModel/validation/modelFields.js +15 -20
- package/domain/contentModel/validation/modelFields.js.map +1 -1
- package/exports/api/cms/graphql.d.ts +1 -0
- package/exports/api/cms/graphql.js +3 -0
- package/exports/api/cms/graphql.js.map +1 -0
- package/exports/api/cms/storage.d.ts +3 -0
- package/exports/api/cms/storage.js +5 -0
- package/exports/api/cms/storage.js.map +1 -0
- package/exports/api/cms/validation.d.ts +4 -0
- package/exports/api/cms/validation.js +6 -0
- package/exports/api/cms/validation.js.map +1 -0
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +3 -3
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +3 -3
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
- package/features/contentEntry/CreateEntry/events.d.ts +2 -2
- package/features/contentEntry/CreateEntry/events.js +1 -1
- package/features/contentEntry/CreateEntry/events.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +3 -3
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +3 -3
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/events.d.ts +2 -2
- package/features/contentEntry/CreateEntryRevisionFrom/events.js +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/events.js.map +1 -1
- package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +1 -1
- package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +1 -1
- package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
- package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +2 -2
- package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -2
- package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
- package/features/contentEntry/DeleteEntry/events.d.ts +2 -2
- package/features/contentEntry/DeleteEntry/events.js +1 -1
- package/features/contentEntry/DeleteEntry/events.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/events.d.ts +2 -2
- package/features/contentEntry/DeleteEntryRevision/events.js +1 -1
- package/features/contentEntry/DeleteEntryRevision/events.js.map +1 -1
- package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +1 -1
- package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +1 -1
- package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
- package/features/contentEntry/DeleteMultipleEntries/events.d.ts +2 -2
- package/features/contentEntry/DeleteMultipleEntries/events.js +1 -1
- package/features/contentEntry/DeleteMultipleEntries/events.js.map +1 -1
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +6 -11
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
- package/features/contentEntry/ListEntries/ListEntriesUseCase.d.ts +1 -1
- package/features/contentEntry/ListEntries/ListEntriesUseCase.js +1 -1
- package/features/contentEntry/ListEntries/ListEntriesUseCase.js.map +1 -1
- package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +1 -1
- package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +1 -1
- package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
- package/features/contentEntry/MoveEntry/events.d.ts +2 -2
- package/features/contentEntry/MoveEntry/events.js +1 -1
- package/features/contentEntry/MoveEntry/events.js.map +1 -1
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +2 -2
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -2
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/PublishEntry/events.d.ts +2 -2
- package/features/contentEntry/PublishEntry/events.js +1 -1
- package/features/contentEntry/PublishEntry/events.js.map +1 -1
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +2 -2
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -2
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/RepublishEntry/events.d.ts +2 -2
- package/features/contentEntry/RepublishEntry/events.js +1 -1
- package/features/contentEntry/RepublishEntry/events.js.map +1 -1
- package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +2 -2
- package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -2
- package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
- package/features/contentEntry/RestoreEntryFromBin/events.d.ts +2 -2
- package/features/contentEntry/RestoreEntryFromBin/events.js +1 -1
- package/features/contentEntry/RestoreEntryFromBin/events.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +2 -2
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -2
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/events.d.ts +2 -2
- package/features/contentEntry/UnpublishEntry/events.js +1 -1
- package/features/contentEntry/UnpublishEntry/events.js.map +1 -1
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +3 -3
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -3
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
- package/features/contentEntry/UpdateEntry/events.d.ts +2 -2
- package/features/contentEntry/UpdateEntry/events.js +1 -1
- package/features/contentEntry/UpdateEntry/events.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.d.ts +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelUseCase.d.ts +3 -3
- package/features/contentModel/CreateModel/CreateModelUseCase.js +3 -3
- package/features/contentModel/CreateModel/CreateModelUseCase.js.map +1 -1
- package/features/contentModel/CreateModel/events.d.ts +2 -2
- package/features/contentModel/CreateModel/events.js +1 -1
- package/features/contentModel/CreateModel/events.js.map +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.d.ts +3 -3
- package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js +4 -3
- package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js.map +1 -1
- package/features/contentModel/CreateModelFrom/events.d.ts +2 -2
- package/features/contentModel/CreateModelFrom/events.js +1 -1
- package/features/contentModel/CreateModelFrom/events.js.map +1 -1
- package/features/contentModel/DeleteModel/DeleteModelUseCase.d.ts +1 -1
- package/features/contentModel/DeleteModel/DeleteModelUseCase.js +1 -1
- package/features/contentModel/DeleteModel/DeleteModelUseCase.js.map +1 -1
- package/features/contentModel/DeleteModel/events.d.ts +2 -2
- package/features/contentModel/DeleteModel/events.js +1 -1
- package/features/contentModel/DeleteModel/events.js.map +1 -1
- package/features/contentModel/ModelToAstConverter/ModelToAstConverter.d.ts +3 -3
- package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js +6 -6
- package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js.map +1 -1
- package/features/contentModel/UpdateModel/UpdateModelUseCase.d.ts +2 -2
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js +2 -2
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
- package/features/contentModel/UpdateModel/events.d.ts +2 -2
- package/features/contentModel/UpdateModel/events.js +1 -1
- package/features/contentModel/UpdateModel/events.js.map +1 -1
- package/features/contentModel/shared/ModelsFetcher.d.ts +1 -1
- package/features/contentModel/shared/ModelsFetcher.js +1 -1
- package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +3 -3
- package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +3 -3
- package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/events.d.ts +2 -2
- package/features/contentModelGroup/CreateGroup/events.js +1 -1
- package/features/contentModelGroup/CreateGroup/events.js.map +1 -1
- package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.d.ts +1 -1
- package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js +1 -1
- package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js.map +1 -1
- package/features/contentModelGroup/DeleteGroup/events.d.ts +2 -2
- package/features/contentModelGroup/DeleteGroup/events.js +1 -1
- package/features/contentModelGroup/DeleteGroup/events.js.map +1 -1
- package/features/contentModelGroup/GetGroup/GetGroupRepository.d.ts +2 -2
- package/features/contentModelGroup/GetGroup/GetGroupRepository.js +2 -2
- package/features/contentModelGroup/GetGroup/GetGroupRepository.js.map +1 -1
- package/features/contentModelGroup/ListGroups/ListGroupsRepository.d.ts +2 -2
- package/features/contentModelGroup/ListGroups/ListGroupsRepository.js +2 -2
- package/features/contentModelGroup/ListGroups/ListGroupsRepository.js.map +1 -1
- package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.d.ts +2 -2
- package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +2 -2
- package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
- package/features/contentModelGroup/UpdateGroup/events.d.ts +2 -2
- package/features/contentModelGroup/UpdateGroup/events.js +1 -1
- package/features/contentModelGroup/UpdateGroup/events.js.map +1 -1
- package/features/contentModelGroup/shared/PluginGroupsProvider.d.ts +2 -2
- package/features/contentModelGroup/shared/PluginGroupsProvider.js +2 -2
- package/features/contentModelGroup/shared/PluginGroupsProvider.js.map +1 -1
- package/features/graphql/feature.d.ts +1 -0
- package/features/graphql/feature.js +34 -0
- package/features/graphql/feature.js.map +1 -0
- package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.d.ts +13 -0
- package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js +27 -0
- package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js.map +1 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.d.ts +97 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js +4 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js.map +1 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.d.ts +10 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js +4 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js.map +1 -0
- package/features/graphql/fields/base/BooleanToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/BooleanToGraphQL.js +68 -0
- package/features/graphql/fields/base/BooleanToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/DateTimeToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/DateTimeToGraphQL.js +97 -0
- package/features/graphql/fields/base/DateTimeToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.d.ts +30 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.js +280 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/FileToGraphQL.d.ts +22 -0
- package/features/graphql/fields/base/FileToGraphQL.js +39 -0
- package/features/graphql/fields/base/FileToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/JsonToGraphQL.d.ts +24 -0
- package/features/graphql/fields/base/JsonToGraphQL.js +52 -0
- package/features/graphql/fields/base/JsonToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/LongTextToGraphQL.d.ts +24 -0
- package/features/graphql/fields/base/LongTextToGraphQL.js +57 -0
- package/features/graphql/fields/base/LongTextToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/NumberToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/NumberToGraphQL.js +78 -0
- package/features/graphql/fields/base/NumberToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/ObjectToGraphQL.d.ts +31 -0
- package/features/graphql/fields/base/ObjectToGraphQL.js +264 -0
- package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/RefToGraphQL.d.ts +29 -0
- package/features/graphql/fields/base/RefToGraphQL.js +261 -0
- package/features/graphql/fields/base/RefToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/RichTextToGraphQL.d.ts +25 -0
- package/features/graphql/fields/base/RichTextToGraphQL.js +58 -0
- package/features/graphql/fields/base/RichTextToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/SearchableJsonToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/SearchableJsonToGraphQL.js +62 -0
- package/features/graphql/fields/base/SearchableJsonToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/TextToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/TextToGraphQL.js +74 -0
- package/features/graphql/fields/base/TextToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.d.ts +16 -0
- package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js +37 -0
- package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js.map +1 -0
- package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.d.ts +3 -0
- package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js +14 -0
- package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js.map +1 -0
- package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.d.ts +1 -1
- package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.js +2 -2
- package/features/graphql/fields/base/richText/richTextResolver.js.map +1 -0
- package/{graphqlFields/helpers.d.ts → features/graphql/fields/base/utils/createGraphQLInputField.d.ts} +1 -1
- package/features/graphql/fields/base/utils/createGraphQLInputField.js +17 -0
- package/features/graphql/fields/base/utils/createGraphQLInputField.js.map +1 -0
- package/features/graphql/index.d.ts +4 -0
- package/features/graphql/index.js +6 -0
- package/features/graphql/index.js.map +1 -0
- package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.d.ts +13 -0
- package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js +4 -0
- package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js.map +1 -0
- package/features/installer/CmsInstaller.d.ts +1 -1
- package/features/installer/CmsInstaller.js +1 -1
- package/features/installer/CmsInstaller.js.map +1 -1
- package/features/shared/abstractions.d.ts +9 -2
- package/features/shared/abstractions.js +1 -0
- package/features/shared/abstractions.js.map +1 -1
- package/features/storage/StorageTransformRegistry.d.ts +13 -0
- package/features/storage/StorageTransformRegistry.js +27 -0
- package/features/storage/StorageTransformRegistry.js.map +1 -0
- package/features/storage/abstractions/StorageTransform.d.ts +26 -0
- package/features/storage/abstractions/StorageTransform.js +4 -0
- package/features/storage/abstractions/StorageTransform.js.map +1 -0
- package/features/storage/abstractions/StorageTransformRegistry.d.ts +10 -0
- package/features/storage/abstractions/StorageTransformRegistry.js +4 -0
- package/features/storage/abstractions/StorageTransformRegistry.js.map +1 -0
- package/features/storage/feature.d.ts +1 -0
- package/features/storage/feature.js +24 -0
- package/features/storage/feature.js.map +1 -0
- package/features/storage/fields/DateStorageTransform.d.ts +10 -0
- package/features/storage/fields/DateStorageTransform.js +110 -0
- package/features/storage/fields/DateStorageTransform.js.map +1 -0
- package/features/storage/fields/DefaultStorageTransform.d.ts +10 -0
- package/features/storage/fields/DefaultStorageTransform.js +20 -0
- package/features/storage/fields/DefaultStorageTransform.js.map +1 -0
- package/features/storage/fields/DynamicZoneStorageTransform.d.ts +10 -0
- package/features/storage/fields/DynamicZoneStorageTransform.js +142 -0
- package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -0
- package/features/storage/fields/JsonStorageTransform.d.ts +13 -0
- package/features/storage/fields/JsonStorageTransform.js +31 -0
- package/features/storage/fields/JsonStorageTransform.js.map +1 -0
- package/features/storage/fields/LongTextStorageTransform.d.ts +18 -0
- package/features/storage/fields/LongTextStorageTransform.js +55 -0
- package/features/storage/fields/LongTextStorageTransform.js.map +1 -0
- package/features/storage/fields/ObjectStorageTransform.d.ts +10 -0
- package/features/storage/fields/ObjectStorageTransform.js +99 -0
- package/features/storage/fields/ObjectStorageTransform.js.map +1 -0
- package/features/storage/fields/RichTextStorageTransform.d.ts +13 -0
- package/features/storage/fields/RichTextStorageTransform.js +39 -0
- package/features/storage/fields/RichTextStorageTransform.js.map +1 -0
- package/features/storage/index.d.ts +3 -0
- package/features/storage/index.js +5 -0
- package/features/storage/index.js.map +1 -0
- package/features/validation/CmsModelFieldPatternValidatorRegistry.d.ts +12 -0
- package/features/validation/CmsModelFieldPatternValidatorRegistry.js +21 -0
- package/features/validation/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
- package/features/validation/CmsModelFieldValidatorRegistry.d.ts +12 -0
- package/features/validation/CmsModelFieldValidatorRegistry.js +23 -0
- package/features/validation/CmsModelFieldValidatorRegistry.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidator.d.ts +13 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidator.js +4 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidator.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.d.ts +9 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js +4 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldValidator.d.ts +11 -0
- package/features/validation/abstractions/CmsModelFieldValidator.js +4 -0
- package/features/validation/abstractions/CmsModelFieldValidator.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldValidatorRegistry.d.ts +9 -0
- package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js +4 -0
- package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js.map +1 -0
- package/features/validation/feature.d.ts +1 -0
- package/features/validation/feature.js +48 -0
- package/features/validation/feature.js.map +1 -0
- package/features/validation/index.d.ts +5 -0
- package/features/validation/index.js +7 -0
- package/features/validation/index.js.map +1 -0
- package/features/validation/validators/DateGteValidator.d.ts +10 -0
- package/features/validation/validators/DateGteValidator.js +26 -0
- package/features/validation/validators/DateGteValidator.js.map +1 -0
- package/features/validation/validators/DateLteValidator.d.ts +10 -0
- package/features/validation/validators/DateLteValidator.js +26 -0
- package/features/validation/validators/DateLteValidator.js.map +1 -0
- package/features/validation/validators/GteValidator.d.ts +10 -0
- package/features/validation/validators/GteValidator.js +21 -0
- package/features/validation/validators/GteValidator.js.map +1 -0
- package/features/validation/validators/InValidator.d.ts +10 -0
- package/features/validation/validators/InValidator.js +21 -0
- package/features/validation/validators/InValidator.js.map +1 -0
- package/features/validation/validators/LteValidator.d.ts +10 -0
- package/features/validation/validators/LteValidator.js +21 -0
- package/features/validation/validators/LteValidator.js.map +1 -0
- package/features/validation/validators/MaxLengthValidator.d.ts +10 -0
- package/features/validation/validators/MaxLengthValidator.js +21 -0
- package/features/validation/validators/MaxLengthValidator.js.map +1 -0
- package/features/validation/validators/MinLengthValidator.d.ts +10 -0
- package/features/validation/validators/MinLengthValidator.js +21 -0
- package/features/validation/validators/MinLengthValidator.js.map +1 -0
- package/features/validation/validators/PatternValidator.d.ts +13 -0
- package/features/validation/validators/PatternValidator.js +38 -0
- package/features/validation/validators/PatternValidator.js.map +1 -0
- package/features/validation/validators/RequiredValidator.d.ts +10 -0
- package/features/validation/validators/RequiredValidator.js +16 -0
- package/features/validation/validators/RequiredValidator.js.map +1 -0
- package/features/validation/validators/TimeGteValidator.d.ts +10 -0
- package/features/validation/validators/TimeGteValidator.js +21 -0
- package/features/validation/validators/TimeGteValidator.js.map +1 -0
- package/features/validation/validators/TimeLteValidator.d.ts +10 -0
- package/features/validation/validators/TimeLteValidator.js +21 -0
- package/features/validation/validators/TimeLteValidator.js.map +1 -0
- package/features/validation/validators/UniqueValidator.d.ts +10 -0
- package/features/validation/validators/UniqueValidator.js +47 -0
- package/features/validation/validators/UniqueValidator.js.map +1 -0
- package/features/validation/validators/patterns/EmailPattern.d.ts +12 -0
- package/features/validation/validators/patterns/EmailPattern.js +14 -0
- package/features/validation/validators/patterns/EmailPattern.js.map +1 -0
- package/features/validation/validators/patterns/LowerCasePattern.d.ts +12 -0
- package/features/validation/validators/patterns/LowerCasePattern.js +14 -0
- package/features/validation/validators/patterns/LowerCasePattern.js.map +1 -0
- package/features/validation/validators/patterns/LowerCaseSpacePattern.d.ts +12 -0
- package/features/validation/validators/patterns/LowerCaseSpacePattern.js +14 -0
- package/features/validation/validators/patterns/LowerCaseSpacePattern.js.map +1 -0
- package/features/validation/validators/patterns/UpperCasePattern.d.ts +12 -0
- package/features/validation/validators/patterns/UpperCasePattern.js +14 -0
- package/features/validation/validators/patterns/UpperCasePattern.js.map +1 -0
- package/features/validation/validators/patterns/UpperCaseSpacePattern.d.ts +12 -0
- package/features/validation/validators/patterns/UpperCaseSpacePattern.js +14 -0
- package/features/validation/validators/patterns/UpperCaseSpacePattern.js.map +1 -0
- package/features/validation/validators/patterns/UrlPattern.d.ts +12 -0
- package/features/validation/validators/patterns/UrlPattern.js +14 -0
- package/features/validation/validators/patterns/UrlPattern.js.map +1 -0
- package/graphql/getSchema/generateCacheKey.js +1 -1
- package/graphql/getSchema/generateCacheKey.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +2 -1
- package/graphql/schema/baseSchema.js +11 -9
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +3 -2
- package/graphql/schema/createFieldResolvers.js +5 -4
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.d.ts +3 -2
- package/graphql/schema/createManageResolvers.js +3 -3
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +4 -4
- package/graphql/schema/createManageSDL.js +8 -8
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.d.ts +3 -2
- package/graphql/schema/createPreviewResolvers.js +4 -4
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.d.ts +3 -2
- package/graphql/schema/createReadResolvers.js +4 -4
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +4 -4
- package/graphql/schema/createReadSDL.js +7 -7
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/createSingularResolvers.d.ts +3 -2
- package/graphql/schema/createSingularResolvers.js +3 -3
- package/graphql/schema/createSingularResolvers.js.map +1 -1
- package/graphql/schema/createSingularSDL.d.ts +3 -2
- package/graphql/schema/createSingularSDL.js +3 -3
- package/graphql/schema/createSingularSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js +6 -7
- package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +14 -17
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/index.d.ts +1 -4
- package/index.js +2 -6
- package/index.js.map +1 -1
- package/package.json +25 -25
- package/plugins/index.d.ts +0 -2
- package/plugins/index.js +0 -2
- package/plugins/index.js.map +1 -1
- package/types/modelField.d.ts +1 -1
- package/types/modelField.js.map +1 -1
- package/types/plugins.d.ts +1 -305
- package/types/plugins.js.map +1 -1
- package/types/types.d.ts +4 -44
- package/types/types.js +0 -4
- package/types/types.js.map +1 -1
- package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.d.ts +3 -2
- package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js +3 -3
- package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js.map +1 -1
- package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.d.ts +4 -3
- package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js +3 -3
- package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +2 -0
- package/utils/converters/ConverterCollection.js +3 -2
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyFromStorageConverter.d.ts +2 -0
- package/utils/converters/valueKeyFromStorageConverter.js +4 -2
- package/utils/converters/valueKeyFromStorageConverter.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +2 -3
- package/utils/converters/valueKeyStorageConverter.js +7 -3
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/converters/valueKeyToStorageConverter.d.ts +2 -0
- package/utils/converters/valueKeyToStorageConverter.js +4 -2
- package/utils/converters/valueKeyToStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +3 -2
- package/utils/createTypeFromFields.js +3 -3
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/entryStorage.d.ts +8 -15
- package/utils/entryStorage.js +31 -59
- package/utils/entryStorage.js.map +1 -1
- package/utils/getBaseFieldType.js +3 -0
- package/utils/getBaseFieldType.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.d.ts +3 -2
- package/utils/getSchemaFromFieldPlugins.js +5 -9
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/renderFields.d.ts +4 -3
- package/utils/renderFields.js +14 -9
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.d.ts +3 -2
- package/utils/renderGetFilterFields.js +2 -2
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +4 -3
- package/utils/renderInputFields.js +5 -11
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.d.ts +3 -2
- package/utils/renderListFilterFields.js +5 -3
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +4 -4
- package/utils/renderSortEnum.js +11 -11
- package/utils/renderSortEnum.js.map +1 -1
- package/graphql/schema/createFieldTypePluginRecords.d.ts +0 -3
- package/graphql/schema/createFieldTypePluginRecords.js +0 -8
- package/graphql/schema/createFieldTypePluginRecords.js.map +0 -1
- package/graphqlFields/boolean.d.ts +0 -2
- package/graphqlFields/boolean.js +0 -52
- package/graphqlFields/boolean.js.map +0 -1
- package/graphqlFields/datetime.d.ts +0 -2
- package/graphqlFields/datetime.js +0 -71
- package/graphqlFields/datetime.js.map +0 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +0 -2
- package/graphqlFields/dynamicZone/dynamicZoneField.js +0 -313
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +0 -1
- package/graphqlFields/dynamicZone/index.d.ts +0 -1
- package/graphqlFields/dynamicZone/index.js +0 -3
- package/graphqlFields/dynamicZone/index.js.map +0 -1
- package/graphqlFields/file.d.ts +0 -2
- package/graphqlFields/file.js +0 -37
- package/graphqlFields/file.js.map +0 -1
- package/graphqlFields/helpers.js +0 -20
- package/graphqlFields/helpers.js.map +0 -1
- package/graphqlFields/index.d.ts +0 -2
- package/graphqlFields/index.js +0 -15
- package/graphqlFields/index.js.map +0 -1
- package/graphqlFields/json.d.ts +0 -2
- package/graphqlFields/json.js +0 -42
- package/graphqlFields/json.js.map +0 -1
- package/graphqlFields/longText.d.ts +0 -2
- package/graphqlFields/longText.js +0 -57
- package/graphqlFields/longText.js.map +0 -1
- package/graphqlFields/number.d.ts +0 -2
- package/graphqlFields/number.js +0 -63
- package/graphqlFields/number.js.map +0 -1
- package/graphqlFields/object.d.ts +0 -2
- package/graphqlFields/object.js +0 -245
- package/graphqlFields/object.js.map +0 -1
- package/graphqlFields/ref.d.ts +0 -2
- package/graphqlFields/ref.js +0 -286
- package/graphqlFields/ref.js.map +0 -1
- package/graphqlFields/richText/richTextResolver.js.map +0 -1
- package/graphqlFields/richText.d.ts +0 -2
- package/graphqlFields/richText.js +0 -48
- package/graphqlFields/richText.js.map +0 -1
- package/graphqlFields/searchableJson.d.ts +0 -2
- package/graphqlFields/searchableJson.js +0 -53
- package/graphqlFields/searchableJson.js.map +0 -1
- package/graphqlFields/text.d.ts +0 -2
- package/graphqlFields/text.js +0 -59
- package/graphqlFields/text.js.map +0 -1
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +0 -20
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +0 -19
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +0 -1
- package/plugins/StorageTransformPlugin.d.ts +0 -35
- package/plugins/StorageTransformPlugin.js +0 -26
- package/plugins/StorageTransformPlugin.js.map +0 -1
- package/storage/date.d.ts +0 -3
- package/storage/date.js +0 -110
- package/storage/date.js.map +0 -1
- package/storage/default.d.ts +0 -2
- package/storage/default.js +0 -19
- package/storage/default.js.map +0 -1
- package/storage/dynamicZone.d.ts +0 -2
- package/storage/dynamicZone.js +0 -149
- package/storage/dynamicZone.js.map +0 -1
- package/storage/index.d.ts +0 -1
- package/storage/index.js +0 -13
- package/storage/index.js.map +0 -1
- package/storage/json.d.ts +0 -2
- package/storage/json.js +0 -49
- package/storage/json.js.map +0 -1
- package/storage/object.d.ts +0 -2
- package/storage/object.js +0 -104
- package/storage/object.js.map +0 -1
- package/validators/dateGte.d.ts +0 -2
- package/validators/dateGte.js +0 -25
- package/validators/dateGte.js.map +0 -1
- package/validators/dateLte.d.ts +0 -2
- package/validators/dateLte.js +0 -25
- package/validators/dateLte.js.map +0 -1
- package/validators/gte.d.ts +0 -2
- package/validators/gte.js +0 -22
- package/validators/gte.js.map +0 -1
- package/validators/in.d.ts +0 -2
- package/validators/in.js +0 -22
- package/validators/in.js.map +0 -1
- package/validators/index.d.ts +0 -1
- package/validators/index.js +0 -16
- package/validators/index.js.map +0 -1
- package/validators/lte.d.ts +0 -2
- package/validators/lte.js +0 -22
- package/validators/lte.js.map +0 -1
- package/validators/maxLength.d.ts +0 -2
- package/validators/maxLength.js +0 -22
- package/validators/maxLength.js.map +0 -1
- package/validators/minLength.d.ts +0 -2
- package/validators/minLength.js +0 -22
- package/validators/minLength.js.map +0 -1
- package/validators/pattern.d.ts +0 -2
- package/validators/pattern.js +0 -36
- package/validators/pattern.js.map +0 -1
- package/validators/patternPlugins/email.d.ts +0 -2
- package/validators/patternPlugins/email.js +0 -13
- package/validators/patternPlugins/email.js.map +0 -1
- package/validators/patternPlugins/index.d.ts +0 -2
- package/validators/patternPlugins/index.js +0 -11
- package/validators/patternPlugins/index.js.map +0 -1
- package/validators/patternPlugins/lowerCase.d.ts +0 -2
- package/validators/patternPlugins/lowerCase.js +0 -13
- package/validators/patternPlugins/lowerCase.js.map +0 -1
- package/validators/patternPlugins/lowerCaseSpace.d.ts +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js +0 -13
- package/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
- package/validators/patternPlugins/upperCase.d.ts +0 -2
- package/validators/patternPlugins/upperCase.js +0 -13
- package/validators/patternPlugins/upperCase.js.map +0 -1
- package/validators/patternPlugins/upperCaseSpace.d.ts +0 -2
- package/validators/patternPlugins/upperCaseSpace.js +0 -13
- package/validators/patternPlugins/upperCaseSpace.js.map +0 -1
- package/validators/patternPlugins/url.d.ts +0 -2
- package/validators/patternPlugins/url.js +0 -13
- package/validators/patternPlugins/url.js.map +0 -1
- package/validators/required.d.ts +0 -2
- package/validators/required.js +0 -17
- package/validators/required.js.map +0 -1
- package/validators/timeGte.d.ts +0 -2
- package/validators/timeGte.js +0 -20
- package/validators/timeGte.js.map +0 -1
- package/validators/timeLte.d.ts +0 -2
- package/validators/timeLte.js +0 -20
- package/validators/timeLte.js.map +0 -1
- package/validators/unique.d.ts +0 -6
- package/validators/unique.js +0 -57
- package/validators/unique.js.map +0 -1
package/context.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import type { CmsContext
|
|
1
|
+
import type { CmsContext } from "./types/index.js";
|
|
2
2
|
import { ContextPlugin } from "@webiny/api";
|
|
3
|
-
export
|
|
4
|
-
storageOperations: HeadlessCmsStorageOperations;
|
|
5
|
-
}
|
|
6
|
-
export declare const createContextPlugin: ({ storageOperations }: CrudParams) => ContextPlugin<CmsContext>;
|
|
3
|
+
export declare const createContextPlugin: () => ContextPlugin<CmsContext>;
|
package/context.js
CHANGED
|
@@ -13,7 +13,7 @@ import { createImportCrud } from "./export/crud/importing.js";
|
|
|
13
13
|
import { getSchema } from "./graphql/getSchema.js";
|
|
14
14
|
import { CmsInstallerFeature } from "./features/installer/feature.js";
|
|
15
15
|
import { ContentEntriesFeature } from "./features/contentEntry/ContentEntriesFeature.js";
|
|
16
|
-
import { AccessControl as AccessControlAbstraction, CmsContext as CmsContextAbstraction, StorageOperations } from "./features/shared/abstractions.js";
|
|
16
|
+
import { AccessControl as AccessControlAbstraction, CmsContext as CmsContextAbstraction, StorageOperations, StorageOperationsFactory } from "./features/shared/abstractions.js";
|
|
17
17
|
import { EntryFromStorageTransform, EntryToStorageTransform, PluginsContainer, SearchableFieldsProvider } from "./legacy/abstractions.js";
|
|
18
18
|
import { entryFromStorageTransform, entryToStorageTransform } from "./utils/entryStorage.js";
|
|
19
19
|
import { getSearchableFields } from "./crud/contentEntry/searchableFields.js";
|
|
@@ -22,6 +22,9 @@ import { ContentModelFeature } from "./features/contentModel/ContentModelFeature
|
|
|
22
22
|
import { ModelBuilderFeature } from "./features/modelBuilder/index.js";
|
|
23
23
|
import { CmsWhereMapperFeature } from "./features/whereMapper/feature.js";
|
|
24
24
|
import { CmsSortMapperFeature } from "./features/sortMapper/feature.js";
|
|
25
|
+
import { GraphQLFeature } from "./features/graphql/index.js";
|
|
26
|
+
import { ValidationFeature } from "./features/validation/index.js";
|
|
27
|
+
import { StorageFeature } from "./features/storage/index.js";
|
|
25
28
|
const getParameters = async context => {
|
|
26
29
|
const plugins = context.plugins.byType(CmsParametersPlugin.type);
|
|
27
30
|
for (const plugin of plugins) {
|
|
@@ -32,9 +35,7 @@ const getParameters = async context => {
|
|
|
32
35
|
}
|
|
33
36
|
throw new WebinyError("Could not determine type of the CMS.", "CMS_TYPE_ERROR");
|
|
34
37
|
};
|
|
35
|
-
export const createContextPlugin = ({
|
|
36
|
-
storageOperations
|
|
37
|
-
}) => {
|
|
38
|
+
export const createContextPlugin = () => {
|
|
38
39
|
const plugin = new ContextPlugin(async context => {
|
|
39
40
|
const {
|
|
40
41
|
type
|
|
@@ -58,6 +59,12 @@ export const createContextPlugin = ({
|
|
|
58
59
|
context.cms.MANAGE = true;
|
|
59
60
|
}
|
|
60
61
|
};
|
|
62
|
+
|
|
63
|
+
// TODO figure out a better way. maybe this stuff should be on before handler?
|
|
64
|
+
// GraphQL fields must be loaded before anything else
|
|
65
|
+
GraphQLFeature.register(context.container);
|
|
66
|
+
ValidationFeature.register(context.container);
|
|
67
|
+
StorageFeature.register(context.container);
|
|
61
68
|
async function getExecutableSchema(type) {
|
|
62
69
|
const originalType = context.cms.type;
|
|
63
70
|
setSchemaType(type);
|
|
@@ -73,8 +80,7 @@ export const createContextPlugin = ({
|
|
|
73
80
|
return processRequestBody(input, schema, context);
|
|
74
81
|
};
|
|
75
82
|
}
|
|
76
|
-
context.plugins.register(new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context
|
|
77
|
-
await storageOperations.beforeInit(context);
|
|
83
|
+
context.plugins.register(new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context)));
|
|
78
84
|
const accessControl = new AccessControl({
|
|
79
85
|
getIdentity: async () => context.security.getIdentity(),
|
|
80
86
|
getGroupsPermissions: () => context.security.getPermissions("cms.contentModelGroup"),
|
|
@@ -86,6 +92,9 @@ export const createContextPlugin = ({
|
|
|
86
92
|
});
|
|
87
93
|
}
|
|
88
94
|
});
|
|
95
|
+
const storageOperationsFactory = context.container.resolve(StorageOperationsFactory);
|
|
96
|
+
const storageOperations = await storageOperationsFactory.create(context);
|
|
97
|
+
await storageOperations.beforeInit(context);
|
|
89
98
|
context.cms = {
|
|
90
99
|
type,
|
|
91
100
|
READ: type === "read",
|
|
@@ -124,7 +133,7 @@ export const createContextPlugin = ({
|
|
|
124
133
|
});
|
|
125
134
|
context.container.registerInstance(SearchableFieldsProvider, params => {
|
|
126
135
|
return getSearchableFields({
|
|
127
|
-
|
|
136
|
+
context,
|
|
128
137
|
fields: params.fields,
|
|
129
138
|
input: []
|
|
130
139
|
});
|
package/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebinyError","ContextPlugin","processRequestBody","CmsParametersPlugin","AccessControl","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","createExportCrud","createImportCrud","getSchema","CmsInstallerFeature","ContentEntriesFeature","AccessControlAbstraction","CmsContext","CmsContextAbstraction","StorageOperations","EntryFromStorageTransform","EntryToStorageTransform","PluginsContainer","SearchableFieldsProvider","entryFromStorageTransform","entryToStorageTransform","getSearchableFields","ContentModelGroupFeature","ContentModelFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature","getParameters","context","plugins","byType","type","plugin","result","createContextPlugin","storageOperations","getTenant","tenancy","getCurrentTenant","setSchemaType","cms","READ","PREVIEW","MANAGE","getExecutableSchema","originalType","schema","security","withoutAuthorization","input","register","beforeInit","accessControl","getIdentity","getGroupsPermissions","getPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","listGroups","export","importing","container","registerInstance","model","entry","params","fields","init","name"],"sources":["context.ts"],"sourcesContent":["import type { ApiEndpoint, CmsContext, HeadlessCmsStorageOperations } from \"~/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { GraphQLRequestBody } from \"@webiny/handler-graphql/types.js\";\nimport { processRequestBody } from \"@webiny/handler-graphql\";\nimport type { CmsParametersPluginResponse } from \"~/plugins/CmsParametersPlugin.js\";\nimport { CmsParametersPlugin } from \"~/plugins/CmsParametersPlugin.js\";\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport { StorageOperationsCmsModelPlugin } from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n StorageOperations\n} from \"~/features/shared/abstractions.js\";\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer,\n SearchableFieldsProvider\n} from \"./legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\"Could not determine type of the CMS.\", \"CMS_TYPE_ERROR\");\n};\n\nexport interface CrudParams {\n storageOperations: HeadlessCmsStorageOperations;\n}\n\nexport const createContextPlugin = ({ storageOperations }: CrudParams) => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n const { type } = await getParameters(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n const setSchemaType = (type: ApiEndpoint | null) => {\n if (!type) {\n return;\n }\n\n context.cms.type = type;\n\n switch (type) {\n case \"read\":\n context.cms.READ = true;\n break;\n case \"preview\":\n context.cms.PREVIEW = true;\n break;\n default:\n context.cms.MANAGE = true;\n }\n };\n\n async function getExecutableSchema(type: ApiEndpoint) {\n const originalType = context.cms.type;\n setSchemaType(type);\n\n const schema = await context.security.withoutAuthorization(() => {\n return getSchema({\n context,\n getTenant,\n type\n });\n });\n\n setSchemaType(originalType);\n\n return async <TData, TExtensions>(input: GraphQLRequestBody | GraphQLRequestBody[]) => {\n return processRequestBody<TData, TExtensions>(input, schema, context);\n };\n }\n\n context.plugins.register(\n new StorageOperationsCmsModelPlugin(\n createCmsModelFieldConvertersAttachFactory(context.plugins)\n )\n );\n\n await storageOperations.beforeInit(context);\n\n const accessControl = new AccessControl({\n getIdentity: async () => context.security.getIdentity(),\n getGroupsPermissions: () => context.security.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => context.security.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => context.security.getPermissions(\"cms.contentEntry\"),\n listAllGroups: () => {\n return context.security.withoutAuthorization(() => {\n return context.cms.listGroups();\n });\n }\n });\n\n context.cms = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n storageOperations,\n accessControl,\n getExecutableSchema,\n ...createModelGroupsCrud({\n context\n }),\n ...createModelsCrud({\n context\n }),\n ...createContentEntryCrud({\n context\n }),\n export: {\n ...createExportCrud(context)\n },\n importing: {\n ...createImportCrud(context)\n }\n };\n\n // Register legacy dependencies\n context.container.registerInstance(StorageOperations, storageOperations);\n context.container.registerInstance(AccessControlAbstraction, accessControl);\n context.container.registerInstance(CmsContextAbstraction, context);\n context.container.registerInstance(PluginsContainer, context.plugins);\n context.container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(context, model, entry);\n });\n context.container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n });\n context.container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n plugins: context.plugins,\n fields: params.fields,\n input: []\n });\n });\n\n // Register features\n CmsInstallerFeature.register(context.container);\n ContentEntriesFeature.register(context.container);\n ContentModelFeature.register(context.container);\n ContentModelGroupFeature.register(context.container);\n ModelBuilderFeature.register(context.container);\n\n CmsWhereMapperFeature.register(context.container);\n CmsSortMapperFeature.register(context.container);\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n\n plugin.name = \"cms.createContext\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WebinyError","ContextPlugin","processRequestBody","CmsParametersPlugin","AccessControl","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","createExportCrud","createImportCrud","getSchema","CmsInstallerFeature","ContentEntriesFeature","AccessControlAbstraction","CmsContext","CmsContextAbstraction","StorageOperations","StorageOperationsFactory","EntryFromStorageTransform","EntryToStorageTransform","PluginsContainer","SearchableFieldsProvider","entryFromStorageTransform","entryToStorageTransform","getSearchableFields","ContentModelGroupFeature","ContentModelFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature","GraphQLFeature","ValidationFeature","StorageFeature","getParameters","context","plugins","byType","type","plugin","result","createContextPlugin","getTenant","tenancy","getCurrentTenant","setSchemaType","cms","READ","PREVIEW","MANAGE","register","container","getExecutableSchema","originalType","schema","security","withoutAuthorization","input","accessControl","getIdentity","getGroupsPermissions","getPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","listGroups","storageOperationsFactory","resolve","storageOperations","create","beforeInit","export","importing","registerInstance","model","entry","params","fields","init","name"],"sources":["context.ts"],"sourcesContent":["import type { ApiEndpoint, CmsContext } from \"~/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { GraphQLRequestBody } from \"@webiny/handler-graphql/types.js\";\nimport { processRequestBody } from \"@webiny/handler-graphql\";\nimport type { CmsParametersPluginResponse } from \"~/plugins/CmsParametersPlugin.js\";\nimport { CmsParametersPlugin } from \"~/plugins/CmsParametersPlugin.js\";\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport { StorageOperationsCmsModelPlugin } from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n StorageOperations,\n StorageOperationsFactory\n} from \"~/features/shared/abstractions.js\";\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer,\n SearchableFieldsProvider\n} from \"./legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\nimport { GraphQLFeature } from \"~/features/graphql/index.js\";\nimport { ValidationFeature } from \"~/features/validation/index.js\";\nimport { StorageFeature } from \"~/features/storage/index.js\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\"Could not determine type of the CMS.\", \"CMS_TYPE_ERROR\");\n};\n\nexport const createContextPlugin = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n const { type } = await getParameters(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n const setSchemaType = (type: ApiEndpoint | null) => {\n if (!type) {\n return;\n }\n\n context.cms.type = type;\n\n switch (type) {\n case \"read\":\n context.cms.READ = true;\n break;\n case \"preview\":\n context.cms.PREVIEW = true;\n break;\n default:\n context.cms.MANAGE = true;\n }\n };\n\n // TODO figure out a better way. maybe this stuff should be on before handler?\n // GraphQL fields must be loaded before anything else\n GraphQLFeature.register(context.container);\n ValidationFeature.register(context.container);\n StorageFeature.register(context.container);\n\n async function getExecutableSchema(type: ApiEndpoint) {\n const originalType = context.cms.type;\n setSchemaType(type);\n\n const schema = await context.security.withoutAuthorization(() => {\n return getSchema({\n context,\n getTenant,\n type\n });\n });\n\n setSchemaType(originalType);\n\n return async <TData, TExtensions>(input: GraphQLRequestBody | GraphQLRequestBody[]) => {\n return processRequestBody<TData, TExtensions>(input, schema, context);\n };\n }\n\n context.plugins.register(\n new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context))\n );\n\n const accessControl = new AccessControl({\n getIdentity: async () => context.security.getIdentity(),\n getGroupsPermissions: () => context.security.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => context.security.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => context.security.getPermissions(\"cms.contentEntry\"),\n listAllGroups: () => {\n return context.security.withoutAuthorization(() => {\n return context.cms.listGroups();\n });\n }\n });\n\n const storageOperationsFactory = context.container.resolve(StorageOperationsFactory);\n\n const storageOperations = await storageOperationsFactory.create(context);\n await storageOperations.beforeInit(context);\n\n context.cms = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n storageOperations,\n accessControl,\n getExecutableSchema,\n ...createModelGroupsCrud({\n context\n }),\n ...createModelsCrud({\n context\n }),\n ...createContentEntryCrud({\n context\n }),\n export: {\n ...createExportCrud(context)\n },\n importing: {\n ...createImportCrud(context)\n }\n };\n\n // Register legacy dependencies\n context.container.registerInstance(StorageOperations, storageOperations);\n context.container.registerInstance(AccessControlAbstraction, accessControl);\n context.container.registerInstance(CmsContextAbstraction, context);\n context.container.registerInstance(PluginsContainer, context.plugins);\n context.container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(context, model, entry);\n });\n context.container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n });\n context.container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n context,\n fields: params.fields,\n input: []\n });\n });\n\n // Register features\n CmsInstallerFeature.register(context.container);\n ContentEntriesFeature.register(context.container);\n ContentModelFeature.register(context.container);\n ContentModelGroupFeature.register(context.container);\n ModelBuilderFeature.register(context.container);\n CmsWhereMapperFeature.register(context.container);\n CmsSortMapperFeature.register(context.container);\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n\n plugin.name = \"cms.createContext\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,22 +27,12 @@ export interface CanAccessEntryParams extends GetEntriesAccessControlListParams
|
|
|
27
27
|
rwd?: string;
|
|
28
28
|
pw?: string;
|
|
29
29
|
}
|
|
30
|
-
interface AccessControlEntry {
|
|
31
|
-
rwd: string;
|
|
32
|
-
canAccessNonOwned: boolean;
|
|
33
|
-
canAccessOnlyOwned: boolean;
|
|
34
|
-
}
|
|
35
|
-
type AccessControlList = AccessControlEntry[];
|
|
36
|
-
interface EntriesAccessControlEntry extends AccessControlEntry {
|
|
37
|
-
pw?: string;
|
|
38
|
-
}
|
|
39
|
-
type EntriesAccessControlList = EntriesAccessControlEntry[];
|
|
40
30
|
export declare class AccessControl {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
listAllGroupsCallback
|
|
31
|
+
private getIdentity;
|
|
32
|
+
private getGroupsPermissions;
|
|
33
|
+
private getModelsPermissions;
|
|
34
|
+
private getEntriesPermissions;
|
|
35
|
+
private listAllGroupsCallback;
|
|
46
36
|
private fullAccessPermissions;
|
|
47
37
|
private allGroups;
|
|
48
38
|
constructor({ getIdentity, getGroupsPermissions, getModelsPermissions, getEntriesPermissions, listAllGroups }: AccessControlParams);
|
|
@@ -56,10 +46,10 @@ export declare class AccessControl {
|
|
|
56
46
|
* - hasFullAccessToGroups
|
|
57
47
|
*/
|
|
58
48
|
canAccessGroup(params?: CanAccessGroupParams): Promise<boolean>;
|
|
59
|
-
canAccessNonOwnedGroups
|
|
60
|
-
canAccessOnlyOwnedGroups
|
|
61
|
-
getGroupsAccessControlList
|
|
62
|
-
hasFullAccessToGroups
|
|
49
|
+
private canAccessNonOwnedGroups;
|
|
50
|
+
private canAccessOnlyOwnedGroups;
|
|
51
|
+
private getGroupsAccessControlList;
|
|
52
|
+
private hasFullAccessToGroups;
|
|
63
53
|
/**
|
|
64
54
|
* Models-related methods below. 👇
|
|
65
55
|
* - canAccessModel
|
|
@@ -70,11 +60,11 @@ export declare class AccessControl {
|
|
|
70
60
|
* - hasFullAccessToModels
|
|
71
61
|
*/
|
|
72
62
|
canAccessModel(params: CanAccessModelParams): Promise<boolean>;
|
|
73
|
-
ensureCanAccessModel
|
|
74
|
-
canAccessNonOwnedModels
|
|
75
|
-
canAccessOnlyOwnedModels
|
|
76
|
-
getModelsAccessControlList
|
|
77
|
-
hasFullAccessToModels
|
|
63
|
+
private ensureCanAccessModel;
|
|
64
|
+
private canAccessNonOwnedModels;
|
|
65
|
+
private canAccessOnlyOwnedModels;
|
|
66
|
+
private getModelsAccessControlList;
|
|
67
|
+
private hasFullAccessToModels;
|
|
78
68
|
/**
|
|
79
69
|
* Entries-related methods below. 👇
|
|
80
70
|
* - canAccessEntry
|
|
@@ -85,11 +75,11 @@ export declare class AccessControl {
|
|
|
85
75
|
* - hasFullAccessToEntries
|
|
86
76
|
*/
|
|
87
77
|
canAccessEntry(params: CanAccessEntryParams): Promise<boolean>;
|
|
88
|
-
ensureCanAccessEntry
|
|
89
|
-
canAccessNonOwnedEntries
|
|
78
|
+
private ensureCanAccessEntry;
|
|
79
|
+
private canAccessNonOwnedEntries;
|
|
90
80
|
canAccessOnlyOwnedEntries(params: GetEntriesAccessControlListParams): Promise<boolean>;
|
|
91
|
-
getEntriesAccessControlList
|
|
92
|
-
hasFullAccessToEntries
|
|
81
|
+
private getEntriesAccessControlList;
|
|
82
|
+
private hasFullAccessToEntries;
|
|
93
83
|
private modelAuthorizationDisabled;
|
|
94
84
|
private listAllGroups;
|
|
95
85
|
private getGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NotAuthorizedError","AccessControl","constructor","getIdentity","getGroupsPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","fullAccessPermissions","listAllGroupsCallback","allGroups","canAccessGroup","params","acl","getGroupsAccessControlList","canRead","find","ace","rwd","includes","hasRwd","canAccessNonOwnedGroups","some","canAccessNonOwned","canAccessOnlyOwnedGroups","hasFullAccessToGroups","canAccessOnlyOwned","groupsPermissionsList","groupsPermissions","own","modelGroupCreatedBy","group","createdBy","identity","id","push","groups","Array","isArray","permissions","p","filter","Boolean","name","canAccessModel","getModelsAccessControlList","ensureCanAccessModel","canAccess","modelName","model","canAccessNonOwnedModels","canAccessOnlyOwnedModels","hasFullAccessToModels","i","length","modelsPermissionsList","relatedModelPermissions","_src","getGroup","fullAccess","models","modelCreatedBy","modelId","modelAuthorizationDisabled","canAccessEntry","getEntriesAccessControlList","pw","hasPw","ensureCanAccessEntry","entry","entryId","canAccessNonOwnedEntries","canAccessOnlyOwnedEntries","hasFullAccessToEntries","groupPermissions","relatedModelsPermissions","entriesPermissionsList","relatedEntriesPermissions","groupCreatedBy","entryCreatedBy","authorization","slug"],"sources":["AccessControl.ts"],"sourcesContent":["import type {\n CmsEntry,\n CmsEntryPermission,\n CmsGroup,\n CmsGroupPermission,\n CmsModel,\n CmsModelPermission\n} from \"~/types/index.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\n\nexport interface AccessControlParams {\n getIdentity: () => Promise<SecurityIdentity>;\n getGroupsPermissions: () => Promise<CmsGroupPermission[]>;\n getModelsPermissions: () => Promise<CmsModelPermission[]>;\n getEntriesPermissions: () => Promise<CmsEntryPermission[]>;\n listAllGroups: () => Promise<CmsGroup[]>;\n}\n\ninterface GetGroupsAccessControlListParams {\n group?: CmsGroup;\n}\n\ninterface CanAccessGroupParams extends GetGroupsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetModelsAccessControlListParams {\n model?: CmsModel;\n}\n\ninterface CanAccessModelParams extends GetModelsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetEntriesAccessControlListParams {\n model: Pick<CmsModel, \"modelId\" | \"createdBy\" | \"group\" | \"authorization\">;\n entry?: Pick<CmsEntry, \"entryId\" | \"createdBy\">;\n}\n\nexport interface CanAccessEntryParams extends GetEntriesAccessControlListParams {\n rwd?: string;\n pw?: string;\n}\n\ninterface AccessControlEntry {\n rwd: string;\n canAccessNonOwned: boolean;\n canAccessOnlyOwned: boolean;\n}\n\ntype AccessControlList = AccessControlEntry[];\n\ninterface EntriesAccessControlEntry extends AccessControlEntry {\n pw?: string;\n}\n\ntype EntriesAccessControlList = EntriesAccessControlEntry[];\n\ninterface IModelAuthorizationDisabledParams {\n model: Pick<CmsModel, \"authorization\">;\n}\n\nexport class AccessControl {\n getIdentity: AccessControlParams[\"getIdentity\"];\n getGroupsPermissions: AccessControlParams[\"getGroupsPermissions\"];\n getModelsPermissions: AccessControlParams[\"getModelsPermissions\"];\n getEntriesPermissions: AccessControlParams[\"getEntriesPermissions\"];\n listAllGroupsCallback: AccessControlParams[\"listAllGroups\"];\n\n private fullAccessPermissions: string[];\n private allGroups: null | Promise<CmsGroup[]>;\n\n constructor({\n getIdentity,\n getGroupsPermissions,\n getModelsPermissions,\n getEntriesPermissions,\n listAllGroups\n }: AccessControlParams) {\n this.getIdentity = getIdentity;\n this.getGroupsPermissions = getGroupsPermissions;\n this.getModelsPermissions = getModelsPermissions;\n this.getEntriesPermissions = getEntriesPermissions;\n this.fullAccessPermissions = [\"*\", \"cms.*\"];\n this.listAllGroupsCallback = listAllGroups;\n this.allGroups = null;\n }\n\n /**\n * Groups-related methods below. 👇\n * - canAccessGroup\n * - ensureCanAccessGroup\n * - canAccessNonOwnedGroups\n * - canAccessOnlyOwnedGroups\n * - getGroupsAccessControlList\n * - hasFullAccessToGroups\n */\n\n async canAccessGroup(params: CanAccessGroupParams = {}) {\n const acl = await this.getGroupsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd?.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n async canAccessNonOwnedGroups(params: GetGroupsAccessControlListParams) {\n const acl = await this.getGroupsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedGroups(params: GetGroupsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedGroups(params);\n return !canAccessNonOwned;\n }\n\n async getGroupsAccessControlList(\n params: GetGroupsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToGroups()) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (const groupsPermissions of groupsPermissionsList) {\n if (groupsPermissions.own) {\n if (\"group\" in params) {\n const modelGroupCreatedBy = params.group?.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n }\n\n if (groupsPermissions.groups) {\n if (\"group\" in params) {\n const { group } = params;\n if (!group) {\n continue;\n }\n\n const { groups } = groupsPermissions;\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(group.id)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: groupsPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n async hasFullAccessToGroups() {\n const permissions = await this.getGroupsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Models-related methods below. 👇\n * - canAccessModel\n * - ensureCanAccessModel\n * - canAccessNonOwnedModels\n * - canAccessOnlyOwnedModels\n * - getModelsAccessControlList\n * - hasFullAccessToModels\n */\n\n async canAccessModel(params: CanAccessModelParams) {\n const acl = await this.getModelsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n async ensureCanAccessModel(params: CanAccessModelParams = {}) {\n const canAccess = await this.canAccessModel(params);\n if (canAccess) {\n return;\n }\n\n if (\"model\" in params) {\n let modelName = \"(could not determine name)\";\n if (params.model?.name) {\n modelName = `\"${params.model.name}\"`;\n }\n\n throw new NotAuthorizedError(`Not allowed to access content model ${modelName}.`);\n }\n\n throw new NotAuthorizedError(`Not allowed to access content models.`);\n }\n\n async canAccessNonOwnedModels(params: GetModelsAccessControlListParams) {\n const acl = await this.getModelsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedModels(params: GetModelsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedModels(params);\n return !canAccessNonOwned;\n }\n\n async getModelsAccessControlList(\n params: GetModelsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToModels(params)) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupsPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupsPermissions._src\n );\n\n if (!relatedModelPermissions) {\n continue;\n }\n\n if (groupsPermissions.own) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const modelGroupCreatedBy = group.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (groupsPermissions.groups) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n if (!Array.isArray(groupsPermissions.groups)) {\n continue;\n }\n\n if (!groupsPermissions.groups.includes(model.group)) {\n continue;\n }\n }\n }\n\n const fullAccess =\n !relatedModelPermissions.rwd &&\n !relatedModelPermissions.own &&\n !relatedModelPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n\n continue;\n }\n\n if (relatedModelPermissions.own) {\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n const modelCreatedBy = params.model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (relatedModelPermissions.models) {\n const { models } = relatedModelPermissions;\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n if (!Array.isArray(models)) {\n continue;\n }\n\n if (!models.includes(params.model.modelId)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: relatedModelPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n async hasFullAccessToModels(params: GetModelsAccessControlListParams) {\n const { model } = params;\n if (model) {\n if (this.modelAuthorizationDisabled({ model })) {\n return true;\n }\n }\n\n const permissions = await this.getModelsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Entries-related methods below. 👇\n * - canAccessEntry\n * - ensureCanAccessEntry\n * - canAccessNonOwnedEntries\n * - canAccessOnlyOwnedEntries\n * - getEntriesAccessControlList\n * - hasFullAccessToEntries\n */\n\n async canAccessEntry(params: CanAccessEntryParams) {\n const acl = await this.getEntriesAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n const { pw } = params;\n if (pw) {\n const hasPw = acl.find(ace => ace.pw?.includes(pw));\n if (!hasPw) {\n return false;\n }\n }\n\n return true;\n }\n\n async ensureCanAccessEntry(params: CanAccessEntryParams) {\n const canAccess = await this.canAccessEntry(params);\n if (!canAccess) {\n if (params.entry) {\n throw new NotAuthorizedError(\n `Not allowed to access entry \"${params.entry.entryId}\".`\n );\n }\n\n throw new NotAuthorizedError(\n `Not allowed to access \"${params.model.modelId}\" entries.`\n );\n }\n }\n\n async canAccessNonOwnedEntries(params: GetEntriesAccessControlListParams) {\n const acl = await this.getEntriesAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedEntries(params: GetEntriesAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedEntries(params);\n return !canAccessNonOwned;\n }\n\n async getEntriesAccessControlList(\n params: GetEntriesAccessControlListParams\n ): Promise<EntriesAccessControlList> {\n if (await this.hasFullAccessToEntries(params)) {\n return [{ rwd: \"rwd\", pw: \"pu\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n // We need a map of groups slugs to ids, to perform checks on models\n const { model } = params;\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: EntriesAccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelsPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedModelsPermissions) {\n continue;\n }\n\n const entriesPermissionsList = await this.getEntriesPermissions();\n const relatedEntriesPermissions = entriesPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedEntriesPermissions) {\n continue;\n }\n\n if (groupPermissions.own) {\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const groupCreatedBy = group.createdBy;\n if (!groupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (groupCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n if (groupPermissions.groups) {\n const { groups } = groupPermissions;\n\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(model.group)) {\n continue;\n }\n }\n\n if (relatedModelsPermissions.own) {\n const modelCreatedBy = model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n if (relatedModelsPermissions.models) {\n if (!Array.isArray(relatedModelsPermissions.models)) {\n continue;\n }\n\n if (!relatedModelsPermissions.models.includes(model.modelId)) {\n continue;\n }\n }\n\n const fullAccess =\n !relatedEntriesPermissions.rwd &&\n !relatedEntriesPermissions.own &&\n !relatedEntriesPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: \"pu\"\n });\n\n continue;\n }\n\n if (relatedEntriesPermissions.own) {\n if (\"entry\" in params) {\n const entryCreatedBy = params.entry?.createdBy;\n if (!entryCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (entryCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n return acl;\n }\n\n async hasFullAccessToEntries(params: GetEntriesAccessControlListParams) {\n if (this.modelAuthorizationDisabled(params)) {\n return true;\n }\n\n const permissions = await this.getEntriesPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n private modelAuthorizationDisabled(params: IModelAuthorizationDisabledParams) {\n if (\"authorization\" in params.model) {\n const { authorization } = params.model;\n if (typeof authorization === \"boolean\") {\n return authorization === false;\n }\n\n return authorization?.permissions === false;\n }\n\n return false;\n }\n\n private async listAllGroups(): Promise<CmsGroup[]> {\n if (this.allGroups === null) {\n this.allGroups = this.listAllGroupsCallback();\n }\n\n return this.allGroups;\n }\n\n private async getGroup(slug: string): Promise<CmsGroup | undefined> {\n const groups = await this.listAllGroups();\n return groups.find(group => group.slug === slug);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["NotAuthorizedError","AccessControl","constructor","getIdentity","getGroupsPermissions","getModelsPermissions","getEntriesPermissions","listAllGroups","fullAccessPermissions","listAllGroupsCallback","allGroups","canAccessGroup","params","acl","getGroupsAccessControlList","canRead","find","ace","rwd","includes","hasRwd","canAccessNonOwnedGroups","some","canAccessNonOwned","canAccessOnlyOwnedGroups","hasFullAccessToGroups","canAccessOnlyOwned","groupsPermissionsList","groupsPermissions","own","modelGroupCreatedBy","group","createdBy","identity","id","push","groups","Array","isArray","permissions","p","filter","Boolean","name","canAccessModel","getModelsAccessControlList","ensureCanAccessModel","canAccess","modelName","model","canAccessNonOwnedModels","canAccessOnlyOwnedModels","hasFullAccessToModels","i","length","modelsPermissionsList","relatedModelPermissions","_src","getGroup","fullAccess","models","modelCreatedBy","modelId","modelAuthorizationDisabled","canAccessEntry","getEntriesAccessControlList","pw","hasPw","ensureCanAccessEntry","entry","entryId","canAccessNonOwnedEntries","canAccessOnlyOwnedEntries","hasFullAccessToEntries","groupPermissions","relatedModelsPermissions","entriesPermissionsList","relatedEntriesPermissions","groupCreatedBy","entryCreatedBy","authorization","slug"],"sources":["AccessControl.ts"],"sourcesContent":["import type {\n CmsEntry,\n CmsEntryPermission,\n CmsGroup,\n CmsGroupPermission,\n CmsModel,\n CmsModelPermission\n} from \"~/types/index.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\n\nexport interface AccessControlParams {\n getIdentity: () => Promise<SecurityIdentity>;\n getGroupsPermissions: () => Promise<CmsGroupPermission[]>;\n getModelsPermissions: () => Promise<CmsModelPermission[]>;\n getEntriesPermissions: () => Promise<CmsEntryPermission[]>;\n listAllGroups: () => Promise<CmsGroup[]>;\n}\n\ninterface GetGroupsAccessControlListParams {\n group?: CmsGroup;\n}\n\ninterface CanAccessGroupParams extends GetGroupsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetModelsAccessControlListParams {\n model?: CmsModel;\n}\n\ninterface CanAccessModelParams extends GetModelsAccessControlListParams {\n rwd?: string;\n}\n\ninterface GetEntriesAccessControlListParams {\n model: Pick<CmsModel, \"modelId\" | \"createdBy\" | \"group\" | \"authorization\">;\n entry?: Pick<CmsEntry, \"entryId\" | \"createdBy\">;\n}\n\nexport interface CanAccessEntryParams extends GetEntriesAccessControlListParams {\n rwd?: string;\n pw?: string;\n}\n\ninterface AccessControlEntry {\n rwd: string;\n canAccessNonOwned: boolean;\n canAccessOnlyOwned: boolean;\n}\n\ntype AccessControlList = AccessControlEntry[];\n\ninterface EntriesAccessControlEntry extends AccessControlEntry {\n pw?: string;\n}\n\ntype EntriesAccessControlList = EntriesAccessControlEntry[];\n\ninterface IModelAuthorizationDisabledParams {\n model: Pick<CmsModel, \"authorization\">;\n}\n\nexport class AccessControl {\n private getIdentity: AccessControlParams[\"getIdentity\"];\n private getGroupsPermissions: AccessControlParams[\"getGroupsPermissions\"];\n private getModelsPermissions: AccessControlParams[\"getModelsPermissions\"];\n private getEntriesPermissions: AccessControlParams[\"getEntriesPermissions\"];\n private listAllGroupsCallback: AccessControlParams[\"listAllGroups\"];\n\n private fullAccessPermissions: string[];\n private allGroups: null | Promise<CmsGroup[]>;\n\n constructor({\n getIdentity,\n getGroupsPermissions,\n getModelsPermissions,\n getEntriesPermissions,\n listAllGroups\n }: AccessControlParams) {\n this.getIdentity = getIdentity;\n this.getGroupsPermissions = getGroupsPermissions;\n this.getModelsPermissions = getModelsPermissions;\n this.getEntriesPermissions = getEntriesPermissions;\n this.fullAccessPermissions = [\"*\", \"cms.*\"];\n this.listAllGroupsCallback = listAllGroups;\n this.allGroups = null;\n }\n\n /**\n * Groups-related methods below. 👇\n * - canAccessGroup\n * - ensureCanAccessGroup\n * - canAccessNonOwnedGroups\n * - canAccessOnlyOwnedGroups\n * - getGroupsAccessControlList\n * - hasFullAccessToGroups\n */\n\n async canAccessGroup(params: CanAccessGroupParams = {}) {\n const acl = await this.getGroupsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd?.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n private async canAccessNonOwnedGroups(params: GetGroupsAccessControlListParams) {\n const acl = await this.getGroupsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n private async canAccessOnlyOwnedGroups(params: GetGroupsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedGroups(params);\n return !canAccessNonOwned;\n }\n\n private async getGroupsAccessControlList(\n params: GetGroupsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToGroups()) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (const groupsPermissions of groupsPermissionsList) {\n if (groupsPermissions.own) {\n if (\"group\" in params) {\n const modelGroupCreatedBy = params.group?.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n }\n\n if (groupsPermissions.groups) {\n if (\"group\" in params) {\n const { group } = params;\n if (!group) {\n continue;\n }\n\n const { groups } = groupsPermissions;\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(group.id)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: groupsPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n private async hasFullAccessToGroups() {\n const permissions = await this.getGroupsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Models-related methods below. 👇\n * - canAccessModel\n * - ensureCanAccessModel\n * - canAccessNonOwnedModels\n * - canAccessOnlyOwnedModels\n * - getModelsAccessControlList\n * - hasFullAccessToModels\n */\n\n async canAccessModel(params: CanAccessModelParams) {\n const acl = await this.getModelsAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n return true;\n }\n\n private async ensureCanAccessModel(params: CanAccessModelParams = {}) {\n const canAccess = await this.canAccessModel(params);\n if (canAccess) {\n return;\n }\n\n if (\"model\" in params) {\n let modelName = \"(could not determine name)\";\n if (params.model?.name) {\n modelName = `\"${params.model.name}\"`;\n }\n\n throw new NotAuthorizedError(`Not allowed to access content model ${modelName}.`);\n }\n\n throw new NotAuthorizedError(`Not allowed to access content models.`);\n }\n\n private async canAccessNonOwnedModels(params: GetModelsAccessControlListParams) {\n const acl = await this.getModelsAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n private async canAccessOnlyOwnedModels(params: GetModelsAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedModels(params);\n return !canAccessNonOwned;\n }\n\n private async getModelsAccessControlList(\n params: GetModelsAccessControlListParams\n ): Promise<AccessControlList> {\n if (await this.hasFullAccessToModels(params)) {\n return [{ rwd: \"rwd\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: AccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupsPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupsPermissions._src\n );\n\n if (!relatedModelPermissions) {\n continue;\n }\n\n if (groupsPermissions.own) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const modelGroupCreatedBy = group.createdBy;\n if (!modelGroupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelGroupCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (groupsPermissions.groups) {\n if (\"model\" in params) {\n const { model } = params;\n if (!model) {\n continue;\n }\n\n if (!Array.isArray(groupsPermissions.groups)) {\n continue;\n }\n\n if (!groupsPermissions.groups.includes(model.group)) {\n continue;\n }\n }\n }\n\n const fullAccess =\n !relatedModelPermissions.rwd &&\n !relatedModelPermissions.own &&\n !relatedModelPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n\n continue;\n }\n\n if (relatedModelPermissions.own) {\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n const modelCreatedBy = params.model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true\n });\n\n continue;\n }\n\n if (relatedModelPermissions.models) {\n const { models } = relatedModelPermissions;\n if (\"model\" in params) {\n if (!params.model) {\n continue;\n }\n\n if (!Array.isArray(models)) {\n continue;\n }\n\n if (!models.includes(params.model.modelId)) {\n continue;\n }\n }\n }\n\n acl.push({\n rwd: relatedModelPermissions.rwd as string,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false\n });\n }\n\n return acl;\n }\n\n private async hasFullAccessToModels(params: GetModelsAccessControlListParams) {\n const { model } = params;\n if (model) {\n if (this.modelAuthorizationDisabled({ model })) {\n return true;\n }\n }\n\n const permissions = await this.getModelsPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n /**\n * Entries-related methods below. 👇\n * - canAccessEntry\n * - ensureCanAccessEntry\n * - canAccessNonOwnedEntries\n * - canAccessOnlyOwnedEntries\n * - getEntriesAccessControlList\n * - hasFullAccessToEntries\n */\n\n async canAccessEntry(params: CanAccessEntryParams) {\n const acl = await this.getEntriesAccessControlList(params);\n\n const canRead = acl.find(ace => ace.rwd.includes(\"r\"));\n if (!canRead) {\n return false;\n }\n\n const { rwd } = params;\n if (rwd) {\n const hasRwd = acl.find(ace => ace.rwd.includes(rwd));\n if (!hasRwd) {\n return false;\n }\n }\n\n const { pw } = params;\n if (pw) {\n const hasPw = acl.find(ace => ace.pw?.includes(pw));\n if (!hasPw) {\n return false;\n }\n }\n\n return true;\n }\n\n private async ensureCanAccessEntry(params: CanAccessEntryParams) {\n const canAccess = await this.canAccessEntry(params);\n if (!canAccess) {\n if (params.entry) {\n throw new NotAuthorizedError(\n `Not allowed to access entry \"${params.entry.entryId}\".`\n );\n }\n\n throw new NotAuthorizedError(\n `Not allowed to access \"${params.model.modelId}\" entries.`\n );\n }\n }\n\n private async canAccessNonOwnedEntries(params: GetEntriesAccessControlListParams) {\n const acl = await this.getEntriesAccessControlList(params);\n return acl.some(ace => ace.canAccessNonOwned);\n }\n\n async canAccessOnlyOwnedEntries(params: GetEntriesAccessControlListParams) {\n const canAccessNonOwned = await this.canAccessNonOwnedEntries(params);\n return !canAccessNonOwned;\n }\n\n private async getEntriesAccessControlList(\n params: GetEntriesAccessControlListParams\n ): Promise<EntriesAccessControlList> {\n if (await this.hasFullAccessToEntries(params)) {\n return [{ rwd: \"rwd\", pw: \"pu\", canAccessNonOwned: true, canAccessOnlyOwned: false }];\n }\n\n // We need a map of groups slugs to ids, to perform checks on models\n const { model } = params;\n const groupsPermissionsList = await this.getGroupsPermissions();\n const acl: EntriesAccessControlList = [];\n\n for (let i = 0; i < groupsPermissionsList.length; i++) {\n const groupPermissions = groupsPermissionsList[i];\n\n const modelsPermissionsList = await this.getModelsPermissions();\n const relatedModelsPermissions = modelsPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedModelsPermissions) {\n continue;\n }\n\n const entriesPermissionsList = await this.getEntriesPermissions();\n const relatedEntriesPermissions = entriesPermissionsList.find(\n permissions => permissions._src === groupPermissions._src\n );\n\n if (!relatedEntriesPermissions) {\n continue;\n }\n\n if (groupPermissions.own) {\n const group = await this.getGroup(model.group);\n if (!group) {\n continue;\n }\n\n const groupCreatedBy = group.createdBy;\n if (!groupCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (groupCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n if (groupPermissions.groups) {\n const { groups } = groupPermissions;\n\n if (!Array.isArray(groups)) {\n continue;\n }\n\n if (!groups.includes(model.group)) {\n continue;\n }\n }\n\n if (relatedModelsPermissions.own) {\n const modelCreatedBy = model.createdBy;\n if (!modelCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (modelCreatedBy.id !== identity.id) {\n continue;\n }\n\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n if (relatedModelsPermissions.models) {\n if (!Array.isArray(relatedModelsPermissions.models)) {\n continue;\n }\n\n if (!relatedModelsPermissions.models.includes(model.modelId)) {\n continue;\n }\n }\n\n const fullAccess =\n !relatedEntriesPermissions.rwd &&\n !relatedEntriesPermissions.own &&\n !relatedEntriesPermissions.models;\n\n if (fullAccess) {\n acl.push({\n rwd: \"rwd\",\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: \"pu\"\n });\n\n continue;\n }\n\n if (relatedEntriesPermissions.own) {\n if (\"entry\" in params) {\n const entryCreatedBy = params.entry?.createdBy;\n if (!entryCreatedBy) {\n continue;\n }\n\n const identity = await this.getIdentity();\n if (entryCreatedBy.id !== identity.id) {\n continue;\n }\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: false,\n canAccessOnlyOwned: true,\n pw: relatedEntriesPermissions.pw\n });\n\n continue;\n }\n\n acl.push({\n rwd: relatedEntriesPermissions.rwd,\n canAccessNonOwned: true,\n canAccessOnlyOwned: false,\n pw: relatedEntriesPermissions.pw\n });\n }\n\n return acl;\n }\n\n private async hasFullAccessToEntries(params: GetEntriesAccessControlListParams) {\n if (this.modelAuthorizationDisabled(params)) {\n return true;\n }\n\n const permissions = await this.getEntriesPermissions();\n return permissions.some(p => this.fullAccessPermissions.filter(Boolean).includes(p.name));\n }\n\n private modelAuthorizationDisabled(params: IModelAuthorizationDisabledParams) {\n if (\"authorization\" in params.model) {\n const { authorization } = params.model;\n if (typeof authorization === \"boolean\") {\n return authorization === false;\n }\n\n return authorization?.permissions === false;\n }\n\n return false;\n }\n\n private async listAllGroups(): Promise<CmsGroup[]> {\n if (this.allGroups === null) {\n this.allGroups = this.listAllGroupsCallback();\n }\n\n return this.allGroups;\n }\n\n private async getGroup(slug: string): Promise<CmsGroup | undefined> {\n const groups = await this.listAllGroups();\n return groups.find(group => group.slug === slug);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ import { referenceFieldsMapping } from "../referenceFieldsMapping.js";
|
|
|
6
6
|
import { createIdentifier, mdbid } from "@webiny/utils";
|
|
7
7
|
import { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from "./statuses.js";
|
|
8
8
|
import { getIdentity } from "../../../utils/identity.js";
|
|
9
|
+
import { NotAuthorizedError } from "../../../utils/errors.js";
|
|
9
10
|
import { getSystem } from "./system.js";
|
|
10
11
|
/**
|
|
11
12
|
* Used for some fields to convert their values.
|
|
@@ -138,16 +139,21 @@ export const createEntryData = async ({
|
|
|
138
139
|
const status = rawInput.status || STATUS_DRAFT;
|
|
139
140
|
if (status !== STATUS_DRAFT) {
|
|
140
141
|
if (status === STATUS_PUBLISHED) {
|
|
141
|
-
await accessControl.
|
|
142
|
+
const canPublish = await accessControl.canAccessEntry({
|
|
142
143
|
model,
|
|
143
144
|
pw: "p"
|
|
144
145
|
});
|
|
146
|
+
if (!canPublish) {
|
|
147
|
+
throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
|
|
148
|
+
}
|
|
145
149
|
} else if (status === STATUS_UNPUBLISHED) {
|
|
146
|
-
|
|
147
|
-
await accessControl.ensureCanAccessEntry({
|
|
150
|
+
const canUnpublish = await accessControl.canAccessEntry({
|
|
148
151
|
model,
|
|
149
152
|
pw: "u"
|
|
150
153
|
});
|
|
154
|
+
if (!canUnpublish) {
|
|
155
|
+
throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
|
|
156
|
+
}
|
|
151
157
|
}
|
|
152
158
|
}
|
|
153
159
|
const locked = status !== STATUS_DRAFT;
|
|
@@ -226,18 +232,23 @@ export const createEntryData = async ({
|
|
|
226
232
|
};
|
|
227
233
|
if (status !== STATUS_DRAFT) {
|
|
228
234
|
if (status === STATUS_PUBLISHED) {
|
|
229
|
-
await accessControl.
|
|
235
|
+
const canPublish = await accessControl.canAccessEntry({
|
|
230
236
|
model,
|
|
231
237
|
entry,
|
|
232
238
|
pw: "p"
|
|
233
239
|
});
|
|
240
|
+
if (!canPublish) {
|
|
241
|
+
throw new NotAuthorizedError(`Not allowed to access entry "${entry.entryId}".`);
|
|
242
|
+
}
|
|
234
243
|
} else if (status === STATUS_UNPUBLISHED) {
|
|
235
|
-
|
|
236
|
-
await accessControl.ensureCanAccessEntry({
|
|
244
|
+
const canUnpublish = await accessControl.canAccessEntry({
|
|
237
245
|
model,
|
|
238
246
|
entry,
|
|
239
247
|
pw: "u"
|
|
240
248
|
});
|
|
249
|
+
if (!canUnpublish) {
|
|
250
|
+
throw new NotAuthorizedError(`Not allowed to access entry "${entry.entryId}".`);
|
|
251
|
+
}
|
|
241
252
|
}
|
|
242
253
|
}
|
|
243
254
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getDate","ROOT_FOLDER","WebinyError","validateModelEntryDataOrThrow","referenceFieldsMapping","createIdentifier","mdbid","STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","getIdentity","getSystem","convertDefaultValue","field","value","type","Boolean","Number","getDefaultValue","settings","list","defaultValue","undefined","predefinedValues","enabled","Array","isArray","values","selectedValue","find","selected","filter","map","createEntryId","input","entryId","id","match","version","cleanInputValues","model","fields","reduce","acc","fieldId","key","createEntryData","rawInput","options","context","getSecurityIdentity","getTenant","accessControl","initialValues","skipValidators","validateEntries","currentIdentity","currentDateTime","Date","status","ensureCanAccessEntry","pw","locked","revisionLevelPublishingMetaFields","revisionFirstPublishedOn","revisionLastPublishedOn","revisionFirstPublishedBy","revisionLastPublishedBy","entryLevelPublishingMetaFields","firstPublishedOn","lastPublishedOn","firstPublishedBy","lastPublishedBy","entry","tenant","modelId","createdOn","modifiedOn","savedOn","deletedOn","restoredOn","createdBy","modifiedBy","savedBy","deletedBy","restoredBy","revisionCreatedOn","revisionModifiedOn","revisionSavedOn","revisionDeletedOn","revisionRestoredOn","revisionCreatedBy","revisionModifiedBy","revisionSavedBy","revisionDeletedBy","revisionRestoredBy","location","folderId","wbyAco_location","system","live","structuredClone"],"sources":["createEntryData.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport WebinyError from \"@webiny/error\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, mdbid } from \"@webiny/utils\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"./statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport type { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { getSystem } from \"./system.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\n\ntype DefaultValue = boolean | number | string | null;\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsModelField, value: DefaultValue): DefaultValue => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\nconst getDefaultValue = (field: CmsModelField): (DefaultValue | DefaultValue[]) | undefined => {\n const { settings, list } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!list) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n\nconst createEntryId = (input: CreateCmsEntryInput) => {\n let entryId = mdbid();\n if (input.id) {\n if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\\-]+)([a-zA-Z0-9])$/) === null) {\n throw new WebinyError(\n \"The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.\",\n \"INVALID_ID\",\n {\n id: input.id\n }\n );\n }\n entryId = input.id;\n }\n const version = 1;\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\n/**\n * Cleans and adds default values to create input data.\n */\nconst cleanInputValues = <TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: TValues\n) => {\n return model.fields.reduce<TValues>((acc, field) => {\n /**\n * This should never happen, but let's make it sure.\n * The fix would be for the user to add the fieldId on the field definition.\n */\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n const key = field.fieldId as keyof TValues;\n const value = input[key] as TValues[keyof TValues];\n /**\n * We set the default value on create input if value is not defined.\n */\n acc[key] = value === undefined ? (getDefaultValue(field) as TValues[keyof TValues]) : value;\n return acc;\n }, {} as TValues);\n};\n\ninterface CreateEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n model: CmsModel;\n rawInput: CreateCmsEntryInput<TValues>;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n accessControl: AccessControl;\n}\n\ninterface ICreateEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n input: CreateCmsEntryInput<TValues>;\n}\n\nexport const createEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>({\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n getTenant,\n accessControl\n}: CreateEntryDataParams<TValues>): Promise<ICreateEntryDataResponse<TValues>> => {\n const initialValues = cleanInputValues<TValues>(model, rawInput.values || ({} as TValues));\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n values: initialValues,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context,\n model,\n values: initialValues,\n validateEntries: true\n });\n\n const { id, entryId, version } = createEntryId(rawInput);\n\n /**\n * There is a possibility that user sends an ID in the input, so we will use that one.\n * There is no check if the ID is unique or not, that is up to the user.\n */\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * Users can set the initial status of the entry. If so, we need to make\n * sure they have the required permissions and also that all the fields\n * are filled in correctly.\n */\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n await accessControl.ensureCanAccessEntry({ model, pw: \"p\" });\n } else if (status === STATUS_UNPUBLISHED) {\n // If setting the status other than draft, we have to check if the user has permissions to publish.\n await accessControl.ensureCanAccessEntry({ model, pw: \"u\" });\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: null,\n revisionLastPublishedOn: null,\n revisionFirstPublishedBy: null,\n revisionLastPublishedBy: null\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: null,\n lastPublishedOn: null,\n firstPublishedBy: null,\n lastPublishedBy: null\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, currentDateTime),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, currentIdentity)\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n tenant: getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, null),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n createdBy: getIdentity(rawInput.createdBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, null),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n ...entryLevelPublishingMetaFields,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionDeletedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n ...revisionLevelPublishingMetaFields,\n\n version,\n status,\n locked,\n values,\n location: {\n folderId:\n rawInput.location?.folderId || rawInput.wbyAco_location?.folderId || ROOT_FOLDER\n },\n system: getSystem({\n input: rawInput\n }),\n live:\n status === STATUS_PUBLISHED\n ? {\n version\n }\n : null\n };\n\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n await accessControl.ensureCanAccessEntry({ model, entry, pw: \"p\" });\n } else if (status === STATUS_UNPUBLISHED) {\n // If setting the status other than draft, we have to check if the user has permissions to publish.\n await accessControl.ensureCanAccessEntry({ model, entry, pw: \"u\" });\n }\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["getDate","ROOT_FOLDER","WebinyError","validateModelEntryDataOrThrow","referenceFieldsMapping","createIdentifier","mdbid","STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","getIdentity","NotAuthorizedError","getSystem","convertDefaultValue","field","value","type","Boolean","Number","getDefaultValue","settings","list","defaultValue","undefined","predefinedValues","enabled","Array","isArray","values","selectedValue","find","selected","filter","map","createEntryId","input","entryId","id","match","version","cleanInputValues","model","fields","reduce","acc","fieldId","key","createEntryData","rawInput","options","context","getSecurityIdentity","getTenant","accessControl","initialValues","skipValidators","validateEntries","currentIdentity","currentDateTime","Date","status","canPublish","canAccessEntry","pw","modelId","canUnpublish","locked","revisionLevelPublishingMetaFields","revisionFirstPublishedOn","revisionLastPublishedOn","revisionFirstPublishedBy","revisionLastPublishedBy","entryLevelPublishingMetaFields","firstPublishedOn","lastPublishedOn","firstPublishedBy","lastPublishedBy","entry","tenant","createdOn","modifiedOn","savedOn","deletedOn","restoredOn","createdBy","modifiedBy","savedBy","deletedBy","restoredBy","revisionCreatedOn","revisionModifiedOn","revisionSavedOn","revisionDeletedOn","revisionRestoredOn","revisionCreatedBy","revisionModifiedBy","revisionSavedBy","revisionDeletedBy","revisionRestoredBy","location","folderId","wbyAco_location","system","live","structuredClone"],"sources":["createEntryData.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport WebinyError from \"@webiny/error\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, mdbid } from \"@webiny/utils\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"./statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport type { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"./system.js\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\n\ntype DefaultValue = boolean | number | string | null;\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsModelField, value: DefaultValue): DefaultValue => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\nconst getDefaultValue = (field: CmsModelField): (DefaultValue | DefaultValue[]) | undefined => {\n const { settings, list } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!list) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n\nconst createEntryId = (input: CreateCmsEntryInput) => {\n let entryId = mdbid();\n if (input.id) {\n if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\\-]+)([a-zA-Z0-9])$/) === null) {\n throw new WebinyError(\n \"The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.\",\n \"INVALID_ID\",\n {\n id: input.id\n }\n );\n }\n entryId = input.id;\n }\n const version = 1;\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\n/**\n * Cleans and adds default values to create input data.\n */\nconst cleanInputValues = <TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: TValues\n) => {\n return model.fields.reduce<TValues>((acc, field) => {\n /**\n * This should never happen, but let's make it sure.\n * The fix would be for the user to add the fieldId on the field definition.\n */\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n const key = field.fieldId as keyof TValues;\n const value = input[key] as TValues[keyof TValues];\n /**\n * We set the default value on create input if value is not defined.\n */\n acc[key] = value === undefined ? (getDefaultValue(field) as TValues[keyof TValues]) : value;\n return acc;\n }, {} as TValues);\n};\n\ninterface CreateEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n model: CmsModel;\n rawInput: CreateCmsEntryInput<TValues>;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n accessControl: AccessControl;\n}\n\ninterface ICreateEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n input: CreateCmsEntryInput<TValues>;\n}\n\nexport const createEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>({\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n getTenant,\n accessControl\n}: CreateEntryDataParams<TValues>): Promise<ICreateEntryDataResponse<TValues>> => {\n const initialValues = cleanInputValues<TValues>(model, rawInput.values || ({} as TValues));\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n values: initialValues,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context,\n model,\n values: initialValues,\n validateEntries: true\n });\n\n const { id, entryId, version } = createEntryId(rawInput);\n\n /**\n * There is a possibility that user sends an ID in the input, so we will use that one.\n * There is no check if the ID is unique or not, that is up to the user.\n */\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * Users can set the initial status of the entry. If so, we need to make\n * sure they have the required permissions and also that all the fields\n * are filled in correctly.\n */\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`);\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: null,\n revisionLastPublishedOn: null,\n revisionFirstPublishedBy: null,\n revisionLastPublishedBy: null\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: null,\n lastPublishedOn: null,\n firstPublishedBy: null,\n lastPublishedBy: null\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, currentDateTime),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, currentIdentity)\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n tenant: getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, null),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n createdBy: getIdentity(rawInput.createdBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, null),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n ...entryLevelPublishingMetaFields,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionDeletedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n ...revisionLevelPublishingMetaFields,\n\n version,\n status,\n locked,\n values,\n location: {\n folderId:\n rawInput.location?.folderId || rawInput.wbyAco_location?.folderId || ROOT_FOLDER\n },\n system: getSystem({\n input: rawInput\n }),\n live:\n status === STATUS_PUBLISHED\n ? {\n version\n }\n : null\n };\n\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await accessControl.canAccessEntry({ model, entry, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await accessControl.canAccessEntry({ model, entry, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n }\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ import { referenceFieldsMapping } from "../referenceFieldsMapping.js";
|
|
|
6
6
|
import { createIdentifier, parseIdentifier } from "@webiny/utils";
|
|
7
7
|
import WebinyError from "@webiny/error";
|
|
8
8
|
import { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from "./statuses.js";
|
|
9
|
+
import { NotAuthorizedError } from "../../../utils/errors.js";
|
|
9
10
|
import { getSystem } from "./system.js";
|
|
10
11
|
export const createEntryRevisionFromData = async ({
|
|
11
12
|
sourceId,
|
|
@@ -56,16 +57,21 @@ export const createEntryRevisionFromData = async ({
|
|
|
56
57
|
const status = rawInput.status || STATUS_DRAFT;
|
|
57
58
|
if (status !== STATUS_DRAFT) {
|
|
58
59
|
if (status === STATUS_PUBLISHED) {
|
|
59
|
-
await accessControl.
|
|
60
|
+
const canPublish = await accessControl.canAccessEntry({
|
|
60
61
|
model,
|
|
61
62
|
pw: "p"
|
|
62
63
|
});
|
|
64
|
+
if (!canPublish) {
|
|
65
|
+
throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
|
|
66
|
+
}
|
|
63
67
|
} else if (status === STATUS_UNPUBLISHED) {
|
|
64
|
-
|
|
65
|
-
await accessControl.ensureCanAccessEntry({
|
|
68
|
+
const canUnpublish = await accessControl.canAccessEntry({
|
|
66
69
|
model,
|
|
67
70
|
pw: "u"
|
|
68
71
|
});
|
|
72
|
+
if (!canUnpublish) {
|
|
73
|
+
throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
|
|
74
|
+
}
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
77
|
const locked = status !== STATUS_DRAFT;
|