@webiny/api-aco 0.0.0-unstable.e622468070 → 0.0.0-unstable.e6f0dc8ca7
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/createAcoContext.js +2 -6
- package/createAcoContext.js.map +1 -1
- package/createAcoGraphQL.js +4 -4
- package/createAcoGraphQL.js.map +1 -1
- package/exports/api/aco/flp.d.ts +6 -0
- package/exports/api/aco/flp.js +8 -0
- package/exports/api/aco/flp.js.map +1 -0
- package/exports/api/aco/folder.d.ts +10 -0
- package/exports/api/aco/folder.js +12 -0
- package/exports/api/aco/folder.js.map +1 -0
- package/features/cms/feature.d.ts +4 -1
- package/features/flp/CreateFlp/abstractions.d.ts +1 -0
- package/features/flp/CreateFlp/abstractions.js +1 -0
- package/features/flp/CreateFlp/abstractions.js.map +1 -1
- package/features/flp/CreateFlp/feature.d.ts +5 -1
- package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.d.ts +3 -3
- package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js +2 -2
- package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js.map +1 -1
- package/features/flp/CreateFlpOnFolderCreated/feature.d.ts +4 -1
- package/features/flp/DeleteFlp/abstractions.d.ts +1 -0
- package/features/flp/DeleteFlp/abstractions.js +1 -0
- package/features/flp/DeleteFlp/abstractions.js.map +1 -1
- package/features/flp/DeleteFlp/feature.d.ts +5 -1
- package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.d.ts +3 -3
- package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js +2 -2
- package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js.map +1 -1
- package/features/flp/DeleteFlpOnFolderDeleted/feature.d.ts +4 -1
- package/features/flp/FolderLevelPermissions/FolderLevelPermissions.d.ts +3 -3
- package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js +3 -3
- package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js.map +1 -1
- package/features/flp/FolderLevelPermissions/abstractions.d.ts +1 -0
- package/features/flp/FolderLevelPermissions/abstractions.js +1 -0
- package/features/flp/FolderLevelPermissions/abstractions.js.map +1 -1
- package/features/flp/FolderLevelPermissions/feature.d.ts +5 -1
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.d.ts +1 -1
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js.map +1 -1
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.d.ts +1 -1
- package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js.map +1 -1
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.d.ts +1 -1
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js.map +1 -1
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.d.ts +2 -2
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js +2 -2
- package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -1
- package/features/flp/GetFlp/abstractions.d.ts +1 -0
- package/features/flp/GetFlp/abstractions.js +1 -0
- package/features/flp/GetFlp/abstractions.js.map +1 -1
- package/features/flp/GetFlp/feature.d.ts +4 -1
- package/features/flp/GetFlp/feature.js.map +1 -1
- package/features/flp/ListFlps/abstractions.d.ts +1 -0
- package/features/flp/ListFlps/abstractions.js +1 -0
- package/features/flp/ListFlps/abstractions.js.map +1 -1
- package/features/flp/ListFlps/feature.d.ts +4 -1
- package/features/flp/ListFlps/feature.js.map +1 -1
- package/features/flp/UpdateFlp/abstractions.d.ts +1 -0
- package/features/flp/UpdateFlp/abstractions.js +1 -0
- package/features/flp/UpdateFlp/abstractions.js.map +1 -1
- package/features/flp/UpdateFlp/feature.d.ts +5 -1
- package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.d.ts +3 -3
- package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js +2 -2
- package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js.map +1 -1
- package/features/flp/UpdateFlpOnFolderUpdated/feature.d.ts +4 -1
- package/features/folder/CreateFolder/CreateFolderUseCase.d.ts +1 -1
- package/features/folder/CreateFolder/CreateFolderUseCase.js +1 -1
- package/features/folder/CreateFolder/CreateFolderUseCase.js.map +1 -1
- package/features/folder/CreateFolder/abstractions.d.ts +9 -5
- package/features/folder/CreateFolder/abstractions.js +6 -2
- package/features/folder/CreateFolder/abstractions.js.map +1 -1
- package/features/folder/CreateFolder/events.d.ts +3 -3
- package/features/folder/CreateFolder/events.js +4 -4
- package/features/folder/CreateFolder/events.js.map +1 -1
- package/features/folder/CreateFolder/feature.d.ts +5 -1
- package/features/folder/CreateFolder/index.d.ts +1 -1
- package/features/folder/CreateFolder/index.js +1 -1
- package/features/folder/CreateFolder/index.js.map +1 -1
- package/features/folder/DeleteFolder/DeleteFolderUseCase.d.ts +1 -1
- package/features/folder/DeleteFolder/DeleteFolderUseCase.js +1 -1
- package/features/folder/DeleteFolder/DeleteFolderUseCase.js.map +1 -1
- package/features/folder/DeleteFolder/abstractions.d.ts +9 -5
- package/features/folder/DeleteFolder/abstractions.js +6 -2
- package/features/folder/DeleteFolder/abstractions.js.map +1 -1
- package/features/folder/DeleteFolder/events.d.ts +3 -3
- package/features/folder/DeleteFolder/events.js +4 -4
- package/features/folder/DeleteFolder/events.js.map +1 -1
- package/features/folder/DeleteFolder/feature.d.ts +5 -1
- package/features/folder/DeleteFolder/index.d.ts +1 -1
- package/features/folder/DeleteFolder/index.js +1 -1
- package/features/folder/DeleteFolder/index.js.map +1 -1
- package/features/folder/EnsureFolderIsEmpty/abstractions.d.ts +1 -0
- package/features/folder/EnsureFolderIsEmpty/abstractions.js +1 -0
- package/features/folder/EnsureFolderIsEmpty/abstractions.js.map +1 -1
- package/features/folder/EnsureFolderIsEmpty/feature.d.ts +4 -1
- package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.d.ts +3 -3
- package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js +2 -2
- package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js.map +1 -1
- package/features/folder/EnsureFolderIsEmptyOnDelete/feature.d.ts +4 -1
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.d.ts +3 -3
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +2 -2
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -1
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.d.ts +4 -1
- package/features/folder/GetAncestors/abstractions.d.ts +2 -0
- package/features/folder/GetAncestors/abstractions.js +2 -0
- package/features/folder/GetAncestors/abstractions.js.map +1 -1
- package/features/folder/GetAncestors/feature.d.ts +5 -1
- package/features/folder/GetFolder/abstractions.d.ts +8 -5
- package/features/folder/GetFolder/abstractions.js +5 -2
- package/features/folder/GetFolder/abstractions.js.map +1 -1
- package/features/folder/GetFolder/feature.d.ts +5 -1
- package/features/folder/GetFolder/index.d.ts +1 -1
- package/features/folder/GetFolder/index.js +1 -1
- package/features/folder/GetFolder/index.js.map +1 -1
- package/features/folder/GetFolderHierarchy/abstractions.d.ts +2 -0
- package/features/folder/GetFolderHierarchy/abstractions.js +2 -0
- package/features/folder/GetFolderHierarchy/abstractions.js.map +1 -1
- package/features/folder/GetFolderHierarchy/feature.d.ts +5 -1
- package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.d.ts +2 -2
- package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js +3 -3
- package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js.map +1 -1
- package/features/folder/ListFolderLevelPermissionsTargets/abstractions.d.ts +1 -0
- package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js +1 -0
- package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js.map +1 -1
- package/features/folder/ListFolderLevelPermissionsTargets/feature.d.ts +4 -1
- package/features/folder/ListFolders/abstractions.d.ts +2 -0
- package/features/folder/ListFolders/abstractions.js +2 -0
- package/features/folder/ListFolders/abstractions.js.map +1 -1
- package/features/folder/ListFolders/feature.d.ts +5 -1
- package/features/folder/UpdateFolder/UpdateFolderUseCase.d.ts +1 -1
- package/features/folder/UpdateFolder/UpdateFolderUseCase.js +1 -1
- package/features/folder/UpdateFolder/UpdateFolderUseCase.js.map +1 -1
- package/features/folder/UpdateFolder/abstractions.d.ts +9 -5
- package/features/folder/UpdateFolder/abstractions.js +6 -2
- package/features/folder/UpdateFolder/abstractions.js.map +1 -1
- package/features/folder/UpdateFolder/events.d.ts +3 -3
- package/features/folder/UpdateFolder/events.js +4 -4
- package/features/folder/UpdateFolder/events.js.map +1 -1
- package/features/folder/UpdateFolder/feature.d.ts +5 -1
- package/features/folder/UpdateFolder/index.d.ts +1 -1
- package/features/folder/UpdateFolder/index.js +1 -1
- package/features/folder/UpdateFolder/index.js.map +1 -1
- package/features/folder/shared/abstractions.d.ts +1 -0
- package/features/folder/shared/abstractions.js +1 -0
- package/features/folder/shared/abstractions.js.map +1 -1
- package/flp/flp.so.js.map +1 -1
- package/flp/tasks/createFlp.task.d.ts +1 -0
- package/flp/tasks/createFlp.task.js +1 -0
- package/flp/tasks/createFlp.task.js.map +1 -1
- package/flp/tasks/deleteFlp.task.d.ts +1 -0
- package/flp/tasks/deleteFlp.task.js +1 -0
- package/flp/tasks/deleteFlp.task.js.map +1 -1
- package/flp/tasks/syncFlp.task.d.ts +1 -0
- package/flp/tasks/syncFlp.task.js +1 -0
- package/flp/tasks/syncFlp.task.js.map +1 -1
- package/flp/tasks/updateFlp.task.d.ts +1 -0
- package/flp/tasks/updateFlp.task.js +1 -0
- package/flp/tasks/updateFlp.task.js.map +1 -1
- package/folder/createFolderTypeDefs.d.ts +3 -2
- package/folder/createFolderTypeDefs.js +4 -4
- package/folder/createFolderTypeDefs.js.map +1 -1
- package/package.json +27 -38
- package/utils/compress.js +1 -1
- package/utils/compress.js.map +1 -1
- package/utils/ensureAuthentication.js +1 -1
- package/utils/ensureAuthentication.js.map +1 -1
- package/utils/acoRecordId.d.ts +0 -6
- package/utils/acoRecordId.js +0 -27
- package/utils/acoRecordId.js.map +0 -1
package/createAcoContext.js
CHANGED
|
@@ -92,12 +92,8 @@ const setupAcoContext = async (context, setupAcoContextParams) => {
|
|
|
92
92
|
ListFlpsFeature.register(context.container, flpCrudMethods);
|
|
93
93
|
GetFlpFeature.register(context.container, flpCrudMethods);
|
|
94
94
|
CreateFlpOnFolderCreatedFeature.register(context.container);
|
|
95
|
-
UpdateFlpOnFolderUpdatedFeature.register(context.container
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
DeleteFlpOnFolderDeletedFeature.register(context.container, {
|
|
99
|
-
tasks: context.tasks
|
|
100
|
-
});
|
|
95
|
+
UpdateFlpOnFolderUpdatedFeature.register(context.container);
|
|
96
|
+
DeleteFlpOnFolderDeletedFeature.register(context.container);
|
|
101
97
|
|
|
102
98
|
/**
|
|
103
99
|
* Register folder event handlers
|
package/createAcoContext.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ContextPlugin","isHeadlessCmsReady","createAcoStorageOperations","createFilterCrudMethods","createFlpCrudMethods","FolderLevelPermissions","FolderLevelPermissionsFeature","UpdateFolderFeature","DeleteFolderFeature","CreateFolderFeature","GetFolderFeature","ListFoldersFeature","GetFolderHierarchyFeature","GetAncestorsFeature","UpdateFlpOnFolderUpdatedFeature","DeleteFlpOnFolderDeletedFeature","EnsureHcmsFolderIsEmptyOnDeleteFeature","CreateFlpFeature","DeleteFlpFeature","UpdateFlpFeature","EnsureFolderIsEmptyOnDeleteFeature","FilterStorageOperations","ListFlpsFeature","GetFlpFeature","ListFolderLevelPermissionsTargetsFeature","CmsFlpFeature","GetModelUseCase","FolderModel","FolderModelAbstraction","CreateFlpOnFolderCreatedFeature","EnsureFolderIsEmptyFeature","FOLDER_MODEL_ID","FilterPrivateModel","setupAcoContext","context","setupAcoContextParams","tenancy","security","container","register","getModel","resolve","withoutAuthorization","folderModel","execute","registerInstance","value","getTenant","getCurrentTenant","storageOperations","cms","documentClient","flpCrudMethods","filter","tasks","folderLevelPermissions","aco","flp","wcp","canUseFolderLevelPermissions","createAcoContext","params","plugin","benchmark","measure","name"],"sources":["createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { createAcoStorageOperations } from \"~/createAcoStorageOperations.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { createFilterCrudMethods } from \"~/filter/filter.crud.js\";\nimport { createFlpCrudMethods } from \"~/flp/index.js\";\nimport {\n FolderLevelPermissions,\n FolderLevelPermissionsFeature\n} from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderFeature } from \"~/features/folder/UpdateFolder/index.js\";\nimport { DeleteFolderFeature } from \"~/features/folder/DeleteFolder/index.js\";\nimport { CreateFolderFeature } from \"~/features/folder/CreateFolder/index.js\";\nimport { GetFolderFeature } from \"~/features/folder/GetFolder/index.js\";\nimport { ListFoldersFeature } from \"~/features/folder/ListFolders/index.js\";\nimport { GetFolderHierarchyFeature } from \"~/features/folder/GetFolderHierarchy/index.js\";\nimport { GetAncestorsFeature } from \"~/features/folder/GetAncestors/index.js\";\nimport { UpdateFlpOnFolderUpdatedFeature } from \"~/features/flp/UpdateFlpOnFolderUpdated/index.js\";\nimport { DeleteFlpOnFolderDeletedFeature } from \"~/features/flp/DeleteFlpOnFolderDeleted/index.js\";\nimport { EnsureHcmsFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js\";\nimport { CreateFlpFeature } from \"~/features/flp/CreateFlp/index.js\";\nimport { DeleteFlpFeature } from \"~/features/flp/DeleteFlp/index.js\";\nimport { UpdateFlpFeature } from \"~/features/flp/UpdateFlp/index.js\";\nimport { EnsureFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureFolderIsEmptyOnDelete/index.js\";\nimport { FilterStorageOperations } from \"~/features/folder/shared/abstractions.js\";\nimport { ListFlpsFeature } from \"~/features/flp/ListFlps/feature.js\";\nimport { GetFlpFeature } from \"~/features/flp/GetFlp/feature.js\";\nimport { ListFolderLevelPermissionsTargetsFeature } from \"~/features/folder/ListFolderLevelPermissionsTargets/feature.js\";\nimport { Tenant } from \"@webiny/api-core/types/tenancy\";\nimport { CmsFlpFeature } from \"~/features/cms/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderModel as FolderModelAbstraction } from \"~/domain/folder/abstractions.js\";\nimport { CreateFlpOnFolderCreatedFeature } from \"~/features/flp/CreateFlpOnFolderCreated/index.js\";\nimport { EnsureFolderIsEmptyFeature } from \"~/features/folder/EnsureFolderIsEmpty/feature.js\";\nimport { FOLDER_MODEL_ID, FolderModel } from \"~/domain/folder/folder.model.js\";\nimport { FilterPrivateModel } from \"~/filter/filter.model.js\";\n\ninterface CreateAcoContextParams {\n useFolderLevelPermissions?: boolean;\n documentClient: DynamoDBDocument;\n}\n\nconst setupAcoContext = async (\n context: AcoContext,\n setupAcoContextParams: CreateAcoContextParams\n): Promise<void> => {\n const { tenancy, security } = context;\n\n context.container.register(FolderModel);\n context.container.register(FilterPrivateModel);\n\n const getModel = context.container.resolve(GetModelUseCase);\n\n await context.security.withoutAuthorization(async () => {\n const folderModel = await getModel.execute(FOLDER_MODEL_ID);\n context.container.registerInstance(FolderModelAbstraction, folderModel.value);\n });\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const storageOperations = await createAcoStorageOperations({\n /**\n * TODO: We need to figure out a way to pass \"cms\" from outside (e.g. apps/api/graphql)\n */\n cms: context.cms,\n container: context.container,\n documentClient: setupAcoContextParams.documentClient,\n security\n });\n\n const flpCrudMethods = createFlpCrudMethods({\n getTenant,\n storageOperations\n });\n\n FolderLevelPermissionsFeature.register(context.container);\n\n /**\n * Register legacy dependencies via abstractions\n */\n context.container.registerInstance(FilterStorageOperations, storageOperations.filter);\n\n /**\n * Register folder features into DI container\n */\n CreateFolderFeature.register(context.container);\n\n UpdateFolderFeature.register(context.container);\n\n DeleteFolderFeature.register(context.container);\n\n GetFolderFeature.register(context.container);\n\n ListFoldersFeature.register(context.container);\n\n ListFolderLevelPermissionsTargetsFeature.register(context.container);\n\n GetFolderHierarchyFeature.register(context.container);\n\n GetAncestorsFeature.register(context.container);\n\n EnsureFolderIsEmptyFeature.register(context.container);\n\n /**\n * Register FLP use cases and event handlers\n */\n CreateFlpFeature.register(context.container, { context });\n UpdateFlpFeature.register(context.container, { context });\n DeleteFlpFeature.register(context.container, { context });\n ListFlpsFeature.register(context.container, flpCrudMethods);\n GetFlpFeature.register(context.container, flpCrudMethods);\n\n CreateFlpOnFolderCreatedFeature.register(context.container);\n\n UpdateFlpOnFolderUpdatedFeature.register(context.container, {\n tasks: context.tasks\n });\n\n DeleteFlpOnFolderDeletedFeature.register(context.container, {\n tasks: context.tasks\n });\n\n /**\n * Register folder event handlers\n */\n EnsureFolderIsEmptyOnDeleteFeature.register(context.container);\n EnsureHcmsFolderIsEmptyOnDeleteFeature.register(context.container);\n\n /**\n * Setup legacy context\n */\n const folderLevelPermissions = context.container.resolve(FolderLevelPermissions);\n\n context.aco = {\n filter: createFilterCrudMethods({\n container: context.container,\n getTenant,\n storageOperations,\n folderLevelPermissions\n }),\n flp: flpCrudMethods\n };\n\n if (context.wcp.canUseFolderLevelPermissions()) {\n CmsFlpFeature.register(context.container);\n }\n};\n\nexport const createAcoContext = (params: CreateAcoContextParams) => {\n const plugin = new ContextPlugin<AcoContext>(async context => {\n /**\n * We can skip the ACO initialization if the installation is pending.\n */\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.benchmark.measure(\"aco.context.setup\", async () => {\n await setupAcoContext(context, params);\n });\n });\n\n plugin.name = \"aco.createContext\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["ContextPlugin","isHeadlessCmsReady","createAcoStorageOperations","createFilterCrudMethods","createFlpCrudMethods","FolderLevelPermissions","FolderLevelPermissionsFeature","UpdateFolderFeature","DeleteFolderFeature","CreateFolderFeature","GetFolderFeature","ListFoldersFeature","GetFolderHierarchyFeature","GetAncestorsFeature","UpdateFlpOnFolderUpdatedFeature","DeleteFlpOnFolderDeletedFeature","EnsureHcmsFolderIsEmptyOnDeleteFeature","CreateFlpFeature","DeleteFlpFeature","UpdateFlpFeature","EnsureFolderIsEmptyOnDeleteFeature","FilterStorageOperations","ListFlpsFeature","GetFlpFeature","ListFolderLevelPermissionsTargetsFeature","CmsFlpFeature","GetModelUseCase","FolderModel","FolderModelAbstraction","CreateFlpOnFolderCreatedFeature","EnsureFolderIsEmptyFeature","FOLDER_MODEL_ID","FilterPrivateModel","setupAcoContext","context","setupAcoContextParams","tenancy","security","container","register","getModel","resolve","withoutAuthorization","folderModel","execute","registerInstance","value","getTenant","getCurrentTenant","storageOperations","cms","documentClient","flpCrudMethods","filter","folderLevelPermissions","aco","flp","wcp","canUseFolderLevelPermissions","createAcoContext","params","plugin","benchmark","measure","name"],"sources":["createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { createAcoStorageOperations } from \"~/createAcoStorageOperations.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { createFilterCrudMethods } from \"~/filter/filter.crud.js\";\nimport { createFlpCrudMethods } from \"~/flp/index.js\";\nimport {\n FolderLevelPermissions,\n FolderLevelPermissionsFeature\n} from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderFeature } from \"~/features/folder/UpdateFolder/index.js\";\nimport { DeleteFolderFeature } from \"~/features/folder/DeleteFolder/index.js\";\nimport { CreateFolderFeature } from \"~/features/folder/CreateFolder/index.js\";\nimport { GetFolderFeature } from \"~/features/folder/GetFolder/index.js\";\nimport { ListFoldersFeature } from \"~/features/folder/ListFolders/index.js\";\nimport { GetFolderHierarchyFeature } from \"~/features/folder/GetFolderHierarchy/index.js\";\nimport { GetAncestorsFeature } from \"~/features/folder/GetAncestors/index.js\";\nimport { UpdateFlpOnFolderUpdatedFeature } from \"~/features/flp/UpdateFlpOnFolderUpdated/index.js\";\nimport { DeleteFlpOnFolderDeletedFeature } from \"~/features/flp/DeleteFlpOnFolderDeleted/index.js\";\nimport { EnsureHcmsFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js\";\nimport { CreateFlpFeature } from \"~/features/flp/CreateFlp/index.js\";\nimport { DeleteFlpFeature } from \"~/features/flp/DeleteFlp/index.js\";\nimport { UpdateFlpFeature } from \"~/features/flp/UpdateFlp/index.js\";\nimport { EnsureFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureFolderIsEmptyOnDelete/index.js\";\nimport { FilterStorageOperations } from \"~/features/folder/shared/abstractions.js\";\nimport { ListFlpsFeature } from \"~/features/flp/ListFlps/feature.js\";\nimport { GetFlpFeature } from \"~/features/flp/GetFlp/feature.js\";\nimport { ListFolderLevelPermissionsTargetsFeature } from \"~/features/folder/ListFolderLevelPermissionsTargets/feature.js\";\nimport { Tenant } from \"@webiny/api-core/types/tenancy\";\nimport { CmsFlpFeature } from \"~/features/cms/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderModel as FolderModelAbstraction } from \"~/domain/folder/abstractions.js\";\nimport { CreateFlpOnFolderCreatedFeature } from \"~/features/flp/CreateFlpOnFolderCreated/index.js\";\nimport { EnsureFolderIsEmptyFeature } from \"~/features/folder/EnsureFolderIsEmpty/feature.js\";\nimport { FOLDER_MODEL_ID, FolderModel } from \"~/domain/folder/folder.model.js\";\nimport { FilterPrivateModel } from \"~/filter/filter.model.js\";\n\ninterface CreateAcoContextParams {\n useFolderLevelPermissions?: boolean;\n documentClient: DynamoDBDocument;\n}\n\nconst setupAcoContext = async (\n context: AcoContext,\n setupAcoContextParams: CreateAcoContextParams\n): Promise<void> => {\n const { tenancy, security } = context;\n\n context.container.register(FolderModel);\n context.container.register(FilterPrivateModel);\n\n const getModel = context.container.resolve(GetModelUseCase);\n\n await context.security.withoutAuthorization(async () => {\n const folderModel = await getModel.execute(FOLDER_MODEL_ID);\n context.container.registerInstance(FolderModelAbstraction, folderModel.value);\n });\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const storageOperations = await createAcoStorageOperations({\n /**\n * TODO: We need to figure out a way to pass \"cms\" from outside (e.g. apps/api/graphql)\n */\n cms: context.cms,\n container: context.container,\n documentClient: setupAcoContextParams.documentClient,\n security\n });\n\n const flpCrudMethods = createFlpCrudMethods({\n getTenant,\n storageOperations\n });\n\n FolderLevelPermissionsFeature.register(context.container);\n\n /**\n * Register legacy dependencies via abstractions\n */\n context.container.registerInstance(FilterStorageOperations, storageOperations.filter);\n\n /**\n * Register folder features into DI container\n */\n CreateFolderFeature.register(context.container);\n\n UpdateFolderFeature.register(context.container);\n\n DeleteFolderFeature.register(context.container);\n\n GetFolderFeature.register(context.container);\n\n ListFoldersFeature.register(context.container);\n\n ListFolderLevelPermissionsTargetsFeature.register(context.container);\n\n GetFolderHierarchyFeature.register(context.container);\n\n GetAncestorsFeature.register(context.container);\n\n EnsureFolderIsEmptyFeature.register(context.container);\n\n /**\n * Register FLP use cases and event handlers\n */\n CreateFlpFeature.register(context.container, { context });\n UpdateFlpFeature.register(context.container, { context });\n DeleteFlpFeature.register(context.container, { context });\n ListFlpsFeature.register(context.container, flpCrudMethods);\n GetFlpFeature.register(context.container, flpCrudMethods);\n\n CreateFlpOnFolderCreatedFeature.register(context.container);\n\n UpdateFlpOnFolderUpdatedFeature.register(context.container);\n\n DeleteFlpOnFolderDeletedFeature.register(context.container);\n\n /**\n * Register folder event handlers\n */\n EnsureFolderIsEmptyOnDeleteFeature.register(context.container);\n EnsureHcmsFolderIsEmptyOnDeleteFeature.register(context.container);\n\n /**\n * Setup legacy context\n */\n const folderLevelPermissions = context.container.resolve(FolderLevelPermissions);\n\n context.aco = {\n filter: createFilterCrudMethods({\n container: context.container,\n getTenant,\n storageOperations,\n folderLevelPermissions\n }),\n flp: flpCrudMethods\n };\n\n if (context.wcp.canUseFolderLevelPermissions()) {\n CmsFlpFeature.register(context.container);\n }\n};\n\nexport const createAcoContext = (params: CreateAcoContextParams) => {\n const plugin = new ContextPlugin<AcoContext>(async context => {\n /**\n * We can skip the ACO initialization if the installation is pending.\n */\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.benchmark.measure(\"aco.context.setup\", async () => {\n await setupAcoContext(context, params);\n });\n });\n\n plugin.name = \"aco.createContext\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/createAcoGraphQL.js
CHANGED
|
@@ -3,9 +3,9 @@ import { filterSchema } from "./filter/filter.gql.js";
|
|
|
3
3
|
import { createFoldersSchema } from "./folder/folder.gql.js";
|
|
4
4
|
import { ContextPlugin } from "@webiny/api";
|
|
5
5
|
import { isHeadlessCmsReady } from "@webiny/api-headless-cms";
|
|
6
|
-
import { createFieldTypePluginRecords } from "@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords.js";
|
|
7
6
|
import { createGraphQLSchemaPluginFromFieldPlugins } from "@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins.js";
|
|
8
7
|
import { FOLDER_MODEL_ID } from "./domain/folder/folder.model.js";
|
|
8
|
+
import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
|
|
9
9
|
const emptyResolver = () => ({});
|
|
10
10
|
const baseSchema = new GraphQLSchemaPlugin({
|
|
11
11
|
typeDefs: /* GraphQL */`
|
|
@@ -76,17 +76,17 @@ export const createAcoGraphQL = () => {
|
|
|
76
76
|
if (!(await isHeadlessCmsReady(context))) {
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
+
const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);
|
|
79
80
|
await context.security.withoutAuthorization(async () => {
|
|
80
81
|
const model = await context.cms.getModel(FOLDER_MODEL_ID);
|
|
81
82
|
const models = await context.cms.listModels();
|
|
82
|
-
const fieldPlugins = createFieldTypePluginRecords(context.plugins);
|
|
83
83
|
/**
|
|
84
84
|
* We need to register all plugins for all the CMS fields.
|
|
85
85
|
*/
|
|
86
86
|
const plugins = createGraphQLSchemaPluginFromFieldPlugins({
|
|
87
87
|
models,
|
|
88
88
|
type: "manage",
|
|
89
|
-
|
|
89
|
+
fieldRegistry,
|
|
90
90
|
createPlugin: ({
|
|
91
91
|
schema,
|
|
92
92
|
type,
|
|
@@ -100,7 +100,7 @@ export const createAcoGraphQL = () => {
|
|
|
100
100
|
const graphQlPlugin = createFoldersSchema({
|
|
101
101
|
model,
|
|
102
102
|
models,
|
|
103
|
-
|
|
103
|
+
fieldRegistry
|
|
104
104
|
});
|
|
105
105
|
context.plugins.register([...plugins, graphQlPlugin]);
|
|
106
106
|
});
|
package/createAcoGraphQL.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GraphQLSchemaPlugin","filterSchema","createFoldersSchema","ContextPlugin","isHeadlessCmsReady","
|
|
1
|
+
{"version":3,"names":["GraphQLSchemaPlugin","filterSchema","createFoldersSchema","ContextPlugin","isHeadlessCmsReady","createGraphQLSchemaPluginFromFieldPlugins","FOLDER_MODEL_ID","CmsModelFieldToGraphQLRegistry","emptyResolver","baseSchema","typeDefs","resolvers","Query","aco","Mutation","createAcoGraphQL","folderSchema","context","fieldRegistry","container","resolve","security","withoutAuthorization","model","cms","getModel","models","listModels","plugins","type","createPlugin","schema","fieldType","plugin","name","graphQlPlugin","register"],"sources":["createAcoGraphQL.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { filterSchema } from \"~/filter/filter.gql.js\";\nimport { createFoldersSchema } from \"~/folder/folder.gql.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { createGraphQLSchemaPluginFromFieldPlugins } from \"@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins.js\";\nimport { FOLDER_MODEL_ID } from \"~/domain/folder/folder.model.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\nconst emptyResolver = () => ({});\n\nconst baseSchema = new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type AcoQuery {\n _empty: String\n }\n\n type AcoMutation {\n _empty: String\n }\n\n type AcoMeta {\n hasMoreItems: Boolean\n totalCount: Int\n cursor: String\n }\n\n type AcoUser {\n id: ID\n displayName: String\n type: String\n }\n\n type AcoError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type AcoBooleanResponse {\n data: Boolean\n error: AcoError\n }\n\n enum AcoSortDirection {\n ASC\n DESC\n }\n\n input AcoSort {\n id: AcoSortDirection\n createdOn: AcoSortDirection\n modifiedOn: AcoSortDirection\n savedOn: AcoSortDirection\n title: AcoSortDirection\n }\n\n extend type Query {\n aco: AcoQuery\n }\n\n extend type Mutation {\n aco: AcoMutation\n }\n `,\n resolvers: {\n Query: {\n aco: emptyResolver\n },\n Mutation: {\n aco: emptyResolver\n }\n }\n});\n\nexport const createAcoGraphQL = () => {\n const folderSchema = new ContextPlugin<AcoContext>(async context => {\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n await context.security.withoutAuthorization(async () => {\n const model = (await context.cms.getModel(FOLDER_MODEL_ID)) as CmsModel;\n const models = await context.cms.listModels();\n /**\n * We need to register all plugins for all the CMS fields.\n */\n const plugins = createGraphQLSchemaPluginFromFieldPlugins({\n models,\n type: \"manage\",\n fieldRegistry,\n createPlugin: ({ schema, type, fieldType }) => {\n const plugin = new GraphQLSchemaPlugin(schema);\n plugin.name = `aco.graphql.folder.schema.${type}.field.${fieldType}`;\n return plugin;\n }\n });\n\n const graphQlPlugin = createFoldersSchema({\n model,\n models,\n fieldRegistry\n });\n\n context.plugins.register([...plugins, graphQlPlugin]);\n });\n });\n\n return [baseSchema, folderSchema, filterSchema];\n};\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,yBAAyB;AAC7D,SAASC,YAAY;AACrB,SAASC,mBAAmB;AAE5B,SAASC,aAAa,QAAQ,aAAa;AAC3C,SAASC,kBAAkB,QAAQ,0BAA0B;AAE7D,SAASC,yCAAyC,QAAQ,6DAA6D;AACvH,SAASC,eAAe;AACxB,SAASC,8BAA8B,QAAQ,qDAAqD;AAEpG,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAEhC,MAAMC,UAAU,GAAG,IAAIT,mBAAmB,CAAC;EACvCU,QAAQ,EAAE,aAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;EACDC,SAAS,EAAE;IACPC,KAAK,EAAE;MACHC,GAAG,EAAEL;IACT,CAAC;IACDM,QAAQ,EAAE;MACND,GAAG,EAAEL;IACT;EACJ;AACJ,CAAC,CAAC;AAEF,OAAO,MAAMO,gBAAgB,GAAGA,CAAA,KAAM;EAClC,MAAMC,YAAY,GAAG,IAAIb,aAAa,CAAa,MAAMc,OAAO,IAAI;IAChE,IAAI,EAAE,MAAMb,kBAAkB,CAACa,OAAO,CAAC,CAAC,EAAE;MACtC;IACJ;IAEA,MAAMC,aAAa,GAAGD,OAAO,CAACE,SAAS,CAACC,OAAO,CAACb,8BAA8B,CAAC;IAE/E,MAAMU,OAAO,CAACI,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACpD,MAAMC,KAAK,GAAI,MAAMN,OAAO,CAACO,GAAG,CAACC,QAAQ,CAACnB,eAAe,CAAc;MACvE,MAAMoB,MAAM,GAAG,MAAMT,OAAO,CAACO,GAAG,CAACG,UAAU,CAAC,CAAC;MAC7C;AACZ;AACA;MACY,MAAMC,OAAO,GAAGvB,yCAAyC,CAAC;QACtDqB,MAAM;QACNG,IAAI,EAAE,QAAQ;QACdX,aAAa;QACbY,YAAY,EAAEA,CAAC;UAAEC,MAAM;UAAEF,IAAI;UAAEG;QAAU,CAAC,KAAK;UAC3C,MAAMC,MAAM,GAAG,IAAIjC,mBAAmB,CAAC+B,MAAM,CAAC;UAC9CE,MAAM,CAACC,IAAI,GAAG,6BAA6BL,IAAI,UAAUG,SAAS,EAAE;UACpE,OAAOC,MAAM;QACjB;MACJ,CAAC,CAAC;MAEF,MAAME,aAAa,GAAGjC,mBAAmB,CAAC;QACtCqB,KAAK;QACLG,MAAM;QACNR;MACJ,CAAC,CAAC;MAEFD,OAAO,CAACW,OAAO,CAACQ,QAAQ,CAAC,CAAC,GAAGR,OAAO,EAAEO,aAAa,CAAC,CAAC;IACzD,CAAC,CAAC;EACN,CAAC,CAAC;EAEF,OAAO,CAAC1B,UAAU,EAAEO,YAAY,EAAEf,YAAY,CAAC;AACnD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CreateFlpUseCase } from "../../../features/flp/CreateFlp/abstractions.js";
|
|
2
|
+
export { DeleteFlpUseCase } from "../../../features/flp/DeleteFlp/abstractions.js";
|
|
3
|
+
export { FolderLevelPermissions } from "../../../features/flp/FolderLevelPermissions/abstractions.js";
|
|
4
|
+
export { GetFlpUseCase } from "../../../features/flp/GetFlp/abstractions.js";
|
|
5
|
+
export { ListFlpsUseCase } from "../../../features/flp/ListFlps/abstractions.js";
|
|
6
|
+
export { UpdateFlpUseCase } from "../../../features/flp/UpdateFlp/abstractions.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { CreateFlpUseCase } from "../../../features/flp/CreateFlp/abstractions.js";
|
|
2
|
+
export { DeleteFlpUseCase } from "../../../features/flp/DeleteFlp/abstractions.js";
|
|
3
|
+
export { FolderLevelPermissions } from "../../../features/flp/FolderLevelPermissions/abstractions.js";
|
|
4
|
+
export { GetFlpUseCase } from "../../../features/flp/GetFlp/abstractions.js";
|
|
5
|
+
export { ListFlpsUseCase } from "../../../features/flp/ListFlps/abstractions.js";
|
|
6
|
+
export { UpdateFlpUseCase } from "../../../features/flp/UpdateFlp/abstractions.js";
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=flp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CreateFlpUseCase","DeleteFlpUseCase","FolderLevelPermissions","GetFlpUseCase","ListFlpsUseCase","UpdateFlpUseCase"],"sources":["flp.ts"],"sourcesContent":["export { CreateFlpUseCase } from \"~/features/flp/CreateFlp/abstractions.js\";\nexport { DeleteFlpUseCase } from \"~/features/flp/DeleteFlp/abstractions.js\";\nexport { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/abstractions.js\";\nexport { GetFlpUseCase } from \"~/features/flp/GetFlp/abstractions.js\";\nexport { ListFlpsUseCase } from \"~/features/flp/ListFlps/abstractions.js\";\nexport { UpdateFlpUseCase } from \"~/features/flp/UpdateFlp/abstractions.js\";\n"],"mappings":"AAAA,SAASA,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,aAAa;AACtB,SAASC,eAAe;AACxB,SAASC,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { GetAncestorsRepository, GetAncestorsUseCase } from "../../../features/folder/GetAncestors/abstractions.js";
|
|
2
|
+
export { GetFolderUseCase, FolderAfterGetEventHandler, FolderBeforeGetEventHandler } from "../../../features/folder/GetFolder/abstractions.js";
|
|
3
|
+
export { GetFolderHierarchyRepository, GetFolderHierarchyUseCase } from "../../../features/folder/GetFolderHierarchy/abstractions.js";
|
|
4
|
+
export { ListFolderLevelPermissionsTargetsUseCase } from "../../../features/folder/ListFolderLevelPermissionsTargets/abstractions.js";
|
|
5
|
+
export { FolderAfterCreateEventHandler, FolderBeforeCreateEventHandler, CreateFolderRepository, CreateFolderUseCase } from "../../../features/folder/CreateFolder/abstractions.js";
|
|
6
|
+
export { FolderAfterDeleteEventHandler, FolderBeforeDeleteEventHandler, DeleteFolderRepository, DeleteFolderUseCase } from "../../../features/folder/DeleteFolder/abstractions.js";
|
|
7
|
+
export { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler, UpdateFolderRepository, UpdateFolderUseCase } from "../../../features/folder/UpdateFolder/abstractions.js";
|
|
8
|
+
export { EnsureFolderIsEmpty } from "../../../features/folder/EnsureFolderIsEmpty/abstractions.js";
|
|
9
|
+
export { ListFoldersUseCase, ListFoldersRepository } from "../../../features/folder/ListFolders/abstractions.js";
|
|
10
|
+
export { FilterStorageOperations } from "../../../features/folder/shared/abstractions.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { GetAncestorsRepository, GetAncestorsUseCase } from "../../../features/folder/GetAncestors/abstractions.js";
|
|
2
|
+
export { GetFolderUseCase, FolderAfterGetEventHandler, FolderBeforeGetEventHandler } from "../../../features/folder/GetFolder/abstractions.js";
|
|
3
|
+
export { GetFolderHierarchyRepository, GetFolderHierarchyUseCase } from "../../../features/folder/GetFolderHierarchy/abstractions.js";
|
|
4
|
+
export { ListFolderLevelPermissionsTargetsUseCase } from "../../../features/folder/ListFolderLevelPermissionsTargets/abstractions.js";
|
|
5
|
+
export { FolderAfterCreateEventHandler, FolderBeforeCreateEventHandler, CreateFolderRepository, CreateFolderUseCase } from "../../../features/folder/CreateFolder/abstractions.js";
|
|
6
|
+
export { FolderAfterDeleteEventHandler, FolderBeforeDeleteEventHandler, DeleteFolderRepository, DeleteFolderUseCase } from "../../../features/folder/DeleteFolder/abstractions.js";
|
|
7
|
+
export { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler, UpdateFolderRepository, UpdateFolderUseCase } from "../../../features/folder/UpdateFolder/abstractions.js";
|
|
8
|
+
export { EnsureFolderIsEmpty } from "../../../features/folder/EnsureFolderIsEmpty/abstractions.js";
|
|
9
|
+
export { ListFoldersUseCase, ListFoldersRepository } from "../../../features/folder/ListFolders/abstractions.js";
|
|
10
|
+
export { FilterStorageOperations } from "../../../features/folder/shared/abstractions.js";
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=folder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GetAncestorsRepository","GetAncestorsUseCase","GetFolderUseCase","FolderAfterGetEventHandler","FolderBeforeGetEventHandler","GetFolderHierarchyRepository","GetFolderHierarchyUseCase","ListFolderLevelPermissionsTargetsUseCase","FolderAfterCreateEventHandler","FolderBeforeCreateEventHandler","CreateFolderRepository","CreateFolderUseCase","FolderAfterDeleteEventHandler","FolderBeforeDeleteEventHandler","DeleteFolderRepository","DeleteFolderUseCase","FolderAfterUpdateEventHandler","FolderBeforeUpdateEventHandler","UpdateFolderRepository","UpdateFolderUseCase","EnsureFolderIsEmpty","ListFoldersUseCase","ListFoldersRepository","FilterStorageOperations"],"sources":["folder.ts"],"sourcesContent":["export {\n GetAncestorsRepository,\n GetAncestorsUseCase\n} from \"~/features/folder/GetAncestors/abstractions.js\";\n\nexport {\n GetFolderUseCase,\n FolderAfterGetEventHandler,\n FolderBeforeGetEventHandler\n} from \"~/features/folder/GetFolder/abstractions.js\";\n\nexport {\n GetFolderHierarchyRepository,\n GetFolderHierarchyUseCase\n} from \"~/features/folder/GetFolderHierarchy/abstractions.js\";\n\nexport { ListFolderLevelPermissionsTargetsUseCase } from \"~/features/folder/ListFolderLevelPermissionsTargets/abstractions.js\";\n\nexport {\n FolderAfterCreateEventHandler,\n FolderBeforeCreateEventHandler,\n CreateFolderRepository,\n CreateFolderUseCase\n} from \"~/features/folder/CreateFolder/abstractions.js\";\nexport {\n FolderAfterDeleteEventHandler,\n FolderBeforeDeleteEventHandler,\n DeleteFolderRepository,\n DeleteFolderUseCase\n} from \"~/features/folder/DeleteFolder/abstractions.js\";\n\nexport {\n FolderAfterUpdateEventHandler,\n FolderBeforeUpdateEventHandler,\n UpdateFolderRepository,\n UpdateFolderUseCase\n} from \"~/features/folder/UpdateFolder/abstractions.js\";\n\nexport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\n\nexport {\n ListFoldersUseCase,\n ListFoldersRepository\n} from \"~/features/folder/ListFolders/abstractions.js\";\n\nexport { FilterStorageOperations } from \"~/features/folder/shared/abstractions.js\";\n"],"mappings":"AAAA,SACIA,sBAAsB,EACtBC,mBAAmB;AAGvB,SACIC,gBAAgB,EAChBC,0BAA0B,EAC1BC,2BAA2B;AAG/B,SACIC,4BAA4B,EAC5BC,yBAAyB;AAG7B,SAASC,wCAAwC;AAEjD,SACIC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,sBAAsB,EACtBC,mBAAmB;AAEvB,SACIC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,sBAAsB,EACtBC,mBAAmB;AAGvB,SACIC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,sBAAsB,EACtBC,mBAAmB;AAGvB,SAASC,mBAAmB;AAE5B,SACIC,kBAAkB,EAClBC,qBAAqB;AAGzB,SAASC,uBAAuB","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import type { Folder } from "../../../folder/folder.types.js";
|
|
|
2
2
|
export interface ICreateFlpUseCase {
|
|
3
3
|
execute: (folder: Folder) => Promise<void>;
|
|
4
4
|
}
|
|
5
|
+
/** Create a folder-level permission. */
|
|
5
6
|
export declare const CreateFlpUseCase: import("@webiny/di").Abstraction<ICreateFlpUseCase>;
|
|
6
7
|
export declare namespace CreateFlpUseCase {
|
|
7
8
|
type Interface = ICreateFlpUseCase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","CreateFlpUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Folder } from \"~/folder/folder.types.js\";\n\n// Use Case Abstraction\nexport interface ICreateFlpUseCase {\n execute: (folder: Folder) => Promise<void>;\n}\n\nexport const CreateFlpUseCase = createAbstraction<ICreateFlpUseCase>(\"CreateFlpUseCase\");\n\nexport namespace CreateFlpUseCase {\n export type Interface = ICreateFlpUseCase;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAGvD;;AAKA,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","CreateFlpUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Folder } from \"~/folder/folder.types.js\";\n\n// Use Case Abstraction\nexport interface ICreateFlpUseCase {\n execute: (folder: Folder) => Promise<void>;\n}\n\n/** Create a folder-level permission. */\nexport const CreateFlpUseCase = createAbstraction<ICreateFlpUseCase>(\"CreateFlpUseCase\");\n\nexport namespace CreateFlpUseCase {\n export type Interface = ICreateFlpUseCase;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAGvD;;AAKA;AACA,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { Container } from "@webiny/di";
|
|
1
2
|
import type { AcoContext } from "../../../types.js";
|
|
2
3
|
interface LegacyDeps {
|
|
3
4
|
context: AcoContext;
|
|
4
5
|
}
|
|
5
|
-
export declare const CreateFlpFeature:
|
|
6
|
+
export declare const CreateFlpFeature: {
|
|
7
|
+
name: string;
|
|
8
|
+
register(container: Container, context: LegacyDeps): void;
|
|
9
|
+
};
|
|
6
10
|
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { CreateFlpUseCase } from "../CreateFlp/abstractions.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FolderAfterCreateEventHandler } from "../../../features/folder/CreateFolder/abstractions.js";
|
|
3
3
|
import type { FolderAfterCreateEvent } from "../../../features/folder/CreateFolder/events.js";
|
|
4
4
|
import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
5
|
-
declare class CreateFlpOnFolderCreatedHandlerImpl implements
|
|
5
|
+
declare class CreateFlpOnFolderCreatedHandlerImpl implements FolderAfterCreateEventHandler.Interface {
|
|
6
6
|
private createFlpUseCase;
|
|
7
7
|
private tasks?;
|
|
8
8
|
constructor(createFlpUseCase: CreateFlpUseCase.Interface, tasks?: TaskService.Interface | undefined);
|
|
9
9
|
handle(event: FolderAfterCreateEvent): Promise<void>;
|
|
10
10
|
}
|
|
11
11
|
export declare const CreateFlpOnFolderCreatedHandler: typeof CreateFlpOnFolderCreatedHandlerImpl & {
|
|
12
|
-
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/api-core/features/eventPublisher/abstractions.js").DomainEvent<import("~/features/folder/CreateFolder/abstractions.js").FolderAfterCreatePayload>>>;
|
|
13
13
|
};
|
|
14
14
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CreateFlpUseCase } from "../CreateFlp/abstractions.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FolderAfterCreateEventHandler } from "../../folder/CreateFolder/abstractions.js";
|
|
3
3
|
import { CREATE_FLP_TASK_ID } from "../../../flp/tasks/index.js";
|
|
4
4
|
import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
5
5
|
class CreateFlpOnFolderCreatedHandlerImpl {
|
|
@@ -27,7 +27,7 @@ class CreateFlpOnFolderCreatedHandlerImpl {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
export const CreateFlpOnFolderCreatedHandler =
|
|
30
|
+
export const CreateFlpOnFolderCreatedHandler = FolderAfterCreateEventHandler.createImplementation({
|
|
31
31
|
implementation: CreateFlpOnFolderCreatedHandlerImpl,
|
|
32
32
|
dependencies: [CreateFlpUseCase, [TaskService, {
|
|
33
33
|
optional: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CreateFlpUseCase","
|
|
1
|
+
{"version":3,"names":["CreateFlpUseCase","FolderAfterCreateEventHandler","CREATE_FLP_TASK_ID","TaskService","CreateFlpOnFolderCreatedHandlerImpl","constructor","createFlpUseCase","tasks","handle","event","folder","payload","trigger","definition","input","execute","CreateFlpOnFolderCreatedHandler","createImplementation","implementation","dependencies","optional"],"sources":["CreateFlpOnFolderCreatedHandler.ts"],"sourcesContent":["import { CreateFlpUseCase } from \"../CreateFlp/abstractions.js\";\nimport { FolderAfterCreateEventHandler } from \"~/features/folder/CreateFolder/abstractions.js\";\nimport type { FolderAfterCreateEvent } from \"~/features/folder/CreateFolder/events.js\";\nimport type { ICreateFlpTaskInput } from \"~/types.js\";\nimport { CREATE_FLP_TASK_ID } from \"~/flp/tasks/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\n\nclass CreateFlpOnFolderCreatedHandlerImpl implements FolderAfterCreateEventHandler.Interface {\n constructor(\n private createFlpUseCase: CreateFlpUseCase.Interface,\n private tasks?: TaskService.Interface\n ) {}\n\n async handle(event: FolderAfterCreateEvent): Promise<void> {\n const { folder } = event.payload;\n\n try {\n if (this.tasks) {\n await this.tasks.trigger<ICreateFlpTaskInput>({\n definition: CREATE_FLP_TASK_ID,\n input: { folder }\n });\n } else {\n await this.createFlpUseCase.execute(folder);\n }\n } catch {\n // Ignore errors\n }\n }\n}\n\nexport const CreateFlpOnFolderCreatedHandler = FolderAfterCreateEventHandler.createImplementation({\n implementation: CreateFlpOnFolderCreatedHandlerImpl,\n dependencies: [CreateFlpUseCase, [TaskService, { optional: true }]]\n});\n"],"mappings":"AAAA,SAASA,gBAAgB;AACzB,SAASC,6BAA6B;AAGtC,SAASC,kBAAkB;AAC3B,SAASC,WAAW,QAAQ,qDAAqD;AAEjF,MAAMC,mCAAmC,CAAoD;EACzFC,WAAWA,CACCC,gBAA4C,EAC5CC,KAA6B,EACvC;IAAA,KAFUD,gBAA4C,GAA5CA,gBAA4C;IAAA,KAC5CC,KAA6B,GAA7BA,KAA6B;EACtC;EAEH,MAAMC,MAAMA,CAACC,KAA6B,EAAiB;IACvD,MAAM;MAAEC;IAAO,CAAC,GAAGD,KAAK,CAACE,OAAO;IAEhC,IAAI;MACA,IAAI,IAAI,CAACJ,KAAK,EAAE;QACZ,MAAM,IAAI,CAACA,KAAK,CAACK,OAAO,CAAsB;UAC1CC,UAAU,EAAEX,kBAAkB;UAC9BY,KAAK,EAAE;YAAEJ;UAAO;QACpB,CAAC,CAAC;MACN,CAAC,MAAM;QACH,MAAM,IAAI,CAACJ,gBAAgB,CAACS,OAAO,CAACL,MAAM,CAAC;MAC/C;IACJ,CAAC,CAAC,MAAM;MACJ;IAAA;EAER;AACJ;AAEA,OAAO,MAAMM,+BAA+B,GAAGf,6BAA6B,CAACgB,oBAAoB,CAAC;EAC9FC,cAAc,EAAEd,mCAAmC;EACnDe,YAAY,EAAE,CAACnB,gBAAgB,EAAE,CAACG,WAAW,EAAE;IAAEiB,QAAQ,EAAE;EAAK,CAAC,CAAC;AACtE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import type { Folder } from "../../../folder/folder.types.js";
|
|
|
2
2
|
export interface IDeleteFlpUseCase {
|
|
3
3
|
execute: (folder: Folder) => Promise<void>;
|
|
4
4
|
}
|
|
5
|
+
/** Delete a folder-level permission. */
|
|
5
6
|
export declare const DeleteFlpUseCase: import("@webiny/di").Abstraction<IDeleteFlpUseCase>;
|
|
6
7
|
export declare namespace DeleteFlpUseCase {
|
|
7
8
|
type Interface = IDeleteFlpUseCase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DeleteFlpUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Folder } from \"~/folder/folder.types.js\";\n\n// Use Case Abstraction\nexport interface IDeleteFlpUseCase {\n execute: (folder: Folder) => Promise<void>;\n}\n\nexport const DeleteFlpUseCase = createAbstraction<IDeleteFlpUseCase>(\"DeleteFlpUseCase\");\n\nexport namespace DeleteFlpUseCase {\n export type Interface = IDeleteFlpUseCase;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAGvD;;AAKA,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","DeleteFlpUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Folder } from \"~/folder/folder.types.js\";\n\n// Use Case Abstraction\nexport interface IDeleteFlpUseCase {\n execute: (folder: Folder) => Promise<void>;\n}\n\n/** Delete a folder-level permission. */\nexport const DeleteFlpUseCase = createAbstraction<IDeleteFlpUseCase>(\"DeleteFlpUseCase\");\n\nexport namespace DeleteFlpUseCase {\n export type Interface = IDeleteFlpUseCase;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAGvD;;AAKA;AACA,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { Container } from "@webiny/di";
|
|
1
2
|
import type { AcoContext } from "../../../types.js";
|
|
2
3
|
interface LegacyDeps {
|
|
3
4
|
context: AcoContext;
|
|
4
5
|
}
|
|
5
|
-
export declare const DeleteFlpFeature:
|
|
6
|
+
export declare const DeleteFlpFeature: {
|
|
7
|
+
name: string;
|
|
8
|
+
register(container: Container, context: LegacyDeps): void;
|
|
9
|
+
};
|
|
6
10
|
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { DeleteFlpUseCase } from "../DeleteFlp/abstractions.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FolderAfterDeleteEventHandler } from "../../../features/folder/DeleteFolder/abstractions.js";
|
|
3
3
|
import type { FolderAfterDeleteEvent } from "../../../features/folder/DeleteFolder/events.js";
|
|
4
4
|
import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
5
|
-
declare class DeleteFlpOnFolderDeletedHandlerImpl implements
|
|
5
|
+
declare class DeleteFlpOnFolderDeletedHandlerImpl implements FolderAfterDeleteEventHandler.Interface {
|
|
6
6
|
private deleteFlpUseCase;
|
|
7
7
|
private tasks?;
|
|
8
8
|
constructor(deleteFlpUseCase: DeleteFlpUseCase.Interface, tasks?: TaskService.Interface | undefined);
|
|
9
9
|
handle(event: FolderAfterDeleteEvent): Promise<void>;
|
|
10
10
|
}
|
|
11
11
|
export declare const DeleteFlpOnFolderDeletedHandler: typeof DeleteFlpOnFolderDeletedHandlerImpl & {
|
|
12
|
-
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/api-core/features/eventPublisher/abstractions.js").DomainEvent<import("~/features/folder/DeleteFolder/abstractions.js").FolderAfterDeletePayload>>>;
|
|
13
13
|
};
|
|
14
14
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DeleteFlpUseCase } from "../DeleteFlp/abstractions.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FolderAfterDeleteEventHandler } from "../../folder/DeleteFolder/abstractions.js";
|
|
3
3
|
import { DELETE_FLP_TASK_ID } from "../../../flp/tasks/index.js";
|
|
4
4
|
import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
5
5
|
class DeleteFlpOnFolderDeletedHandlerImpl {
|
|
@@ -27,7 +27,7 @@ class DeleteFlpOnFolderDeletedHandlerImpl {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
export const DeleteFlpOnFolderDeletedHandler =
|
|
30
|
+
export const DeleteFlpOnFolderDeletedHandler = FolderAfterDeleteEventHandler.createImplementation({
|
|
31
31
|
implementation: DeleteFlpOnFolderDeletedHandlerImpl,
|
|
32
32
|
dependencies: [DeleteFlpUseCase, [TaskService, {
|
|
33
33
|
optional: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DeleteFlpUseCase","
|
|
1
|
+
{"version":3,"names":["DeleteFlpUseCase","FolderAfterDeleteEventHandler","DELETE_FLP_TASK_ID","TaskService","DeleteFlpOnFolderDeletedHandlerImpl","constructor","deleteFlpUseCase","tasks","handle","event","folder","payload","trigger","definition","input","execute","DeleteFlpOnFolderDeletedHandler","createImplementation","implementation","dependencies","optional"],"sources":["DeleteFlpOnFolderDeletedHandler.ts"],"sourcesContent":["import { DeleteFlpUseCase } from \"../DeleteFlp/abstractions.js\";\nimport { FolderAfterDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderAfterDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport type { IDeleteFlpTaskInput } from \"~/types.js\";\nimport { DELETE_FLP_TASK_ID } from \"~/flp/tasks/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\n\nclass DeleteFlpOnFolderDeletedHandlerImpl implements FolderAfterDeleteEventHandler.Interface {\n constructor(\n private deleteFlpUseCase: DeleteFlpUseCase.Interface,\n private tasks?: TaskService.Interface\n ) {}\n\n async handle(event: FolderAfterDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n try {\n if (this.tasks) {\n await this.tasks.trigger<IDeleteFlpTaskInput>({\n definition: DELETE_FLP_TASK_ID,\n input: { folder }\n });\n } else {\n await this.deleteFlpUseCase.execute(folder);\n }\n } catch {\n // Ignore errors\n }\n }\n}\n\nexport const DeleteFlpOnFolderDeletedHandler = FolderAfterDeleteEventHandler.createImplementation({\n implementation: DeleteFlpOnFolderDeletedHandlerImpl,\n dependencies: [DeleteFlpUseCase, [TaskService, { optional: true }]]\n});\n"],"mappings":"AAAA,SAASA,gBAAgB;AACzB,SAASC,6BAA6B;AAGtC,SAASC,kBAAkB;AAC3B,SAASC,WAAW,QAAQ,qDAAqD;AAEjF,MAAMC,mCAAmC,CAAoD;EACzFC,WAAWA,CACCC,gBAA4C,EAC5CC,KAA6B,EACvC;IAAA,KAFUD,gBAA4C,GAA5CA,gBAA4C;IAAA,KAC5CC,KAA6B,GAA7BA,KAA6B;EACtC;EAEH,MAAMC,MAAMA,CAACC,KAA6B,EAAiB;IACvD,MAAM;MAAEC;IAAO,CAAC,GAAGD,KAAK,CAACE,OAAO;IAEhC,IAAI;MACA,IAAI,IAAI,CAACJ,KAAK,EAAE;QACZ,MAAM,IAAI,CAACA,KAAK,CAACK,OAAO,CAAsB;UAC1CC,UAAU,EAAEX,kBAAkB;UAC9BY,KAAK,EAAE;YAAEJ;UAAO;QACpB,CAAC,CAAC;MACN,CAAC,MAAM;QACH,MAAM,IAAI,CAACJ,gBAAgB,CAACS,OAAO,CAACL,MAAM,CAAC;MAC/C;IACJ,CAAC,CAAC,MAAM;MACJ;IAAA;EAER;AACJ;AAEA,OAAO,MAAMM,+BAA+B,GAAGf,6BAA6B,CAACgB,oBAAoB,CAAC;EAC9FC,cAAc,EAAEd,mCAAmC;EACnDe,YAAY,EAAE,CAACnB,gBAAgB,EAAE,CAACG,WAAW,EAAE;IAAEiB,QAAQ,EAAE;EAAK,CAAC,CAAC;AACtE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
2
|
-
import { WcpContext } from "@webiny/api-core/features/WcpContext";
|
|
3
|
-
import { ListUserTeamsUseCase } from "@webiny/api-core/features/ListUserTeams";
|
|
1
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
|
+
import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
|
|
3
|
+
import { ListUserTeamsUseCase } from "@webiny/api-core/features/users/ListUserTeams/index.js";
|
|
4
4
|
import { type CanAccessFolderContentParams, type CanAccessFolderParams } from "./useCases/index.js";
|
|
5
5
|
import { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from "./abstractions.js";
|
|
6
6
|
import type { FolderLevelPermission, FolderPermission, ListFlpsParams } from "../../../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createImplementation } from "@webiny/di";
|
|
2
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
-
import { WcpContext } from "@webiny/api-core/features/WcpContext";
|
|
4
|
-
import { ListUserTeamsUseCase } from "@webiny/api-core/features/ListUserTeams";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
|
|
4
|
+
import { ListUserTeamsUseCase } from "@webiny/api-core/features/users/ListUserTeams/index.js";
|
|
5
5
|
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
|
|
6
6
|
import { CanAccessFolder, CanAccessFolderContent, CanCreateFolderInRoot, CheckNotInheritedPermissions, GetDefaultPermissions, GetDefaultPermissionsWithTeams } from "./useCases/index.js";
|
|
7
7
|
import { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from "./abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createImplementation","IdentityContext","WcpContext","ListUserTeamsUseCase","NotAuthorizedError","CanAccessFolder","CanAccessFolderContent","CanCreateFolderInRoot","CheckNotInheritedPermissions","GetDefaultPermissions","GetDefaultPermissionsWithTeams","FolderLevelPermissions","FolderLevelPermissionsAbstraction","ListFlpsUseCase","GetFlpUseCase","FolderLevelPermissionsImpl","constructor","identityContext","wcpContext","listUserTeamsUseCase","getFlpUseCase","listFlpsUseCase","canUseFolderLevelPermissions","enabled","identity","getIdentity","type","canUseTeams","canCreateFolderInRoot","canCreateFolderInRootUseCase","execute","permissionsIncludeNonInheritedPermissions","permissions","checkNotInheritedPermissionsUseCase","canAccessFolder","params","isAuthorizationEnabled","canAccessFolderUseCase","canAccessFolderContent","canUseFlp","authEnabled","canAccessFolderContentUseCase","ensureCanAccessFolder","result","ensureCanAccessFolderContent","canManageFolderContent","flp","rwd","canManageFolderStructure","canManageFolderPermissions","managePermissions","getDefaultPermissions","getDefaultPermissionsUseCase","getDefaultPermissionsWithTeams","listFolderLevelPermissions","flps","Promise","all","map","id","getFolderLevelPermissions","abstraction","implementation","dependencies"],"sources":["FolderLevelPermissions.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { WcpContext } from \"@webiny/api-core/features/WcpContext\";\nimport { ListUserTeamsUseCase } from \"@webiny/api-core/features/ListUserTeams\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport {\n CanAccessFolder,\n CanAccessFolderContent,\n type CanAccessFolderContentParams,\n type CanAccessFolderParams,\n CanCreateFolderInRoot,\n CheckNotInheritedPermissions,\n GetDefaultPermissions,\n GetDefaultPermissionsWithTeams\n} from \"./useCases/index.js\";\nimport { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\nimport { ListFlpsUseCase } from \"~/features/flp/ListFlps/index.js\";\nimport { GetFlpUseCase } from \"~/features/flp/GetFlp/index.js\";\n\nclass FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private wcpContext: WcpContext.Interface,\n private listUserTeamsUseCase: ListUserTeamsUseCase.Interface,\n private getFlpUseCase: GetFlpUseCase.Interface,\n private listFlpsUseCase: ListFlpsUseCase.Interface\n ) {}\n\n public canUseFolderLevelPermissions(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n const identity = this.identityContext.getIdentity();\n\n // FLPs only work with authenticated identities (logged-in users).\n if (!identity) {\n return false;\n }\n\n // At the moment, we only want FLP to be used with identities of type \"admin\".\n // This temporarily addresses the issue of API keys not being able to access content, because\n // FLPs doesn't work with them. Once we start adding FLPs to API keys, we can remove this check.\n if (identity.type !== \"admin\") {\n return false;\n }\n\n return this.wcpContext.canUseFolderLevelPermissions();\n }\n\n public canUseTeams(): boolean {\n return this.wcpContext.canUseTeams();\n }\n\n public canCreateFolderInRoot(): boolean {\n const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();\n return canCreateFolderInRootUseCase.execute();\n }\n\n public permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean {\n const checkNotInheritedPermissionsUseCase = new CheckNotInheritedPermissions();\n return checkNotInheritedPermissionsUseCase.execute(permissions);\n }\n\n public async canAccessFolder(params: CanAccessFolderParams): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n const canAccessFolderUseCase = new CanAccessFolder(this.identityContext);\n return await canAccessFolderUseCase.execute(params);\n }\n\n public async canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean> {\n const canUseFlp = this.canUseFolderLevelPermissions();\n const authEnabled = this.identityContext.isAuthorizationEnabled();\n\n if (!canUseFlp || !authEnabled) {\n return true;\n }\n\n const canAccessFolderContentUseCase = new CanAccessFolderContent(this.identityContext);\n return await canAccessFolderContentUseCase.execute(params);\n }\n\n public async ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void> {\n const result = await this.canAccessFolder(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void> {\n const result = await this.canAccessFolderContent(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async canManageFolderContent(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolderContent({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolder({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean> {\n if (!this.canUseFolderLevelPermissions()) {\n return false;\n }\n\n if (!this.identityContext.isAuthorizationEnabled()) {\n return true;\n }\n\n return await this.canAccessFolder({\n permissions: flp.permissions,\n rwd: \"w\",\n managePermissions: true\n });\n }\n\n public getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n const getDefaultPermissionsUseCase = new GetDefaultPermissions(this.identityContext);\n\n if (this.canUseTeams()) {\n const getDefaultPermissionsWithTeams = new GetDefaultPermissionsWithTeams(\n this.identityContext,\n this.listUserTeamsUseCase,\n getDefaultPermissionsUseCase\n );\n\n return getDefaultPermissionsWithTeams.execute(permissions);\n }\n\n return getDefaultPermissionsUseCase.execute(permissions);\n }\n\n public async listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n > {\n const flps = await this.listFlpsUseCase.execute(params);\n\n return Promise.all(\n flps.map(async flp => ({\n id: flp.id,\n permissions: await this.getDefaultPermissions(flp.permissions)\n }))\n );\n }\n\n public async getFolderLevelPermissions(id: string): Promise<FolderPermission[]> {\n const flp = await this.getFlpUseCase.execute(id);\n return await this.getDefaultPermissions(flp?.permissions ?? []);\n }\n}\n\nexport const FolderLevelPermissions = createImplementation({\n abstraction: FolderLevelPermissionsAbstraction,\n implementation: FolderLevelPermissionsImpl,\n dependencies: [\n IdentityContext,\n WcpContext,\n ListUserTeamsUseCase,\n GetFlpUseCase,\n ListFlpsUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createImplementation","IdentityContext","WcpContext","ListUserTeamsUseCase","NotAuthorizedError","CanAccessFolder","CanAccessFolderContent","CanCreateFolderInRoot","CheckNotInheritedPermissions","GetDefaultPermissions","GetDefaultPermissionsWithTeams","FolderLevelPermissions","FolderLevelPermissionsAbstraction","ListFlpsUseCase","GetFlpUseCase","FolderLevelPermissionsImpl","constructor","identityContext","wcpContext","listUserTeamsUseCase","getFlpUseCase","listFlpsUseCase","canUseFolderLevelPermissions","enabled","identity","getIdentity","type","canUseTeams","canCreateFolderInRoot","canCreateFolderInRootUseCase","execute","permissionsIncludeNonInheritedPermissions","permissions","checkNotInheritedPermissionsUseCase","canAccessFolder","params","isAuthorizationEnabled","canAccessFolderUseCase","canAccessFolderContent","canUseFlp","authEnabled","canAccessFolderContentUseCase","ensureCanAccessFolder","result","ensureCanAccessFolderContent","canManageFolderContent","flp","rwd","canManageFolderStructure","canManageFolderPermissions","managePermissions","getDefaultPermissions","getDefaultPermissionsUseCase","getDefaultPermissionsWithTeams","listFolderLevelPermissions","flps","Promise","all","map","id","getFolderLevelPermissions","abstraction","implementation","dependencies"],"sources":["FolderLevelPermissions.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { ListUserTeamsUseCase } from \"@webiny/api-core/features/users/ListUserTeams/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport {\n CanAccessFolder,\n CanAccessFolderContent,\n type CanAccessFolderContentParams,\n type CanAccessFolderParams,\n CanCreateFolderInRoot,\n CheckNotInheritedPermissions,\n GetDefaultPermissions,\n GetDefaultPermissionsWithTeams\n} from \"./useCases/index.js\";\nimport { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\nimport { ListFlpsUseCase } from \"~/features/flp/ListFlps/index.js\";\nimport { GetFlpUseCase } from \"~/features/flp/GetFlp/index.js\";\n\nclass FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private wcpContext: WcpContext.Interface,\n private listUserTeamsUseCase: ListUserTeamsUseCase.Interface,\n private getFlpUseCase: GetFlpUseCase.Interface,\n private listFlpsUseCase: ListFlpsUseCase.Interface\n ) {}\n\n public canUseFolderLevelPermissions(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n const identity = this.identityContext.getIdentity();\n\n // FLPs only work with authenticated identities (logged-in users).\n if (!identity) {\n return false;\n }\n\n // At the moment, we only want FLP to be used with identities of type \"admin\".\n // This temporarily addresses the issue of API keys not being able to access content, because\n // FLPs doesn't work with them. Once we start adding FLPs to API keys, we can remove this check.\n if (identity.type !== \"admin\") {\n return false;\n }\n\n return this.wcpContext.canUseFolderLevelPermissions();\n }\n\n public canUseTeams(): boolean {\n return this.wcpContext.canUseTeams();\n }\n\n public canCreateFolderInRoot(): boolean {\n const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();\n return canCreateFolderInRootUseCase.execute();\n }\n\n public permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean {\n const checkNotInheritedPermissionsUseCase = new CheckNotInheritedPermissions();\n return checkNotInheritedPermissionsUseCase.execute(permissions);\n }\n\n public async canAccessFolder(params: CanAccessFolderParams): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n const canAccessFolderUseCase = new CanAccessFolder(this.identityContext);\n return await canAccessFolderUseCase.execute(params);\n }\n\n public async canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean> {\n const canUseFlp = this.canUseFolderLevelPermissions();\n const authEnabled = this.identityContext.isAuthorizationEnabled();\n\n if (!canUseFlp || !authEnabled) {\n return true;\n }\n\n const canAccessFolderContentUseCase = new CanAccessFolderContent(this.identityContext);\n return await canAccessFolderContentUseCase.execute(params);\n }\n\n public async ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void> {\n const result = await this.canAccessFolder(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void> {\n const result = await this.canAccessFolderContent(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async canManageFolderContent(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolderContent({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolder({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean> {\n if (!this.canUseFolderLevelPermissions()) {\n return false;\n }\n\n if (!this.identityContext.isAuthorizationEnabled()) {\n return true;\n }\n\n return await this.canAccessFolder({\n permissions: flp.permissions,\n rwd: \"w\",\n managePermissions: true\n });\n }\n\n public getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n const getDefaultPermissionsUseCase = new GetDefaultPermissions(this.identityContext);\n\n if (this.canUseTeams()) {\n const getDefaultPermissionsWithTeams = new GetDefaultPermissionsWithTeams(\n this.identityContext,\n this.listUserTeamsUseCase,\n getDefaultPermissionsUseCase\n );\n\n return getDefaultPermissionsWithTeams.execute(permissions);\n }\n\n return getDefaultPermissionsUseCase.execute(permissions);\n }\n\n public async listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n > {\n const flps = await this.listFlpsUseCase.execute(params);\n\n return Promise.all(\n flps.map(async flp => ({\n id: flp.id,\n permissions: await this.getDefaultPermissions(flp.permissions)\n }))\n );\n }\n\n public async getFolderLevelPermissions(id: string): Promise<FolderPermission[]> {\n const flp = await this.getFlpUseCase.execute(id);\n return await this.getDefaultPermissions(flp?.permissions ?? []);\n }\n}\n\nexport const FolderLevelPermissions = createImplementation({\n abstraction: FolderLevelPermissionsAbstraction,\n implementation: FolderLevelPermissionsImpl,\n dependencies: [\n IdentityContext,\n WcpContext,\n ListUserTeamsUseCase,\n GetFlpUseCase,\n ListFlpsUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,6 +19,7 @@ export interface IFolderLevelPermissions {
|
|
|
19
19
|
}>>;
|
|
20
20
|
getFolderLevelPermissions(id: string): Promise<FolderPermission[]>;
|
|
21
21
|
}
|
|
22
|
+
/** Manage folder-level access control. */
|
|
22
23
|
export declare const FolderLevelPermissions: import("@webiny/di").Abstraction<IFolderLevelPermissions>;
|
|
23
24
|
export declare namespace FolderLevelPermissions {
|
|
24
25
|
type Interface = IFolderLevelPermissions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","FolderLevelPermissions"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CanAccessFolderContentParams, CanAccessFolderParams } from \"./useCases/index.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\n\nexport interface IFolderLevelPermissions {\n canUseFolderLevelPermissions(enabled?: boolean): boolean;\n canUseTeams(): boolean;\n canCreateFolderInRoot(): boolean;\n permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean;\n canAccessFolder(params: CanAccessFolderParams): Promise<boolean>;\n canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean>;\n ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void>;\n ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void>;\n canManageFolderContent(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean>;\n getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]>;\n listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n >;\n getFolderLevelPermissions(id: string): Promise<FolderPermission[]>;\n}\n\nexport const FolderLevelPermissions =\n createAbstraction<IFolderLevelPermissions>(\"FolderLevelPermissions\");\n\nexport namespace FolderLevelPermissions {\n export type Interface = IFolderLevelPermissions;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AA0BvD,OAAO,MAAMC,sBAAsB,GAC/BD,iBAAiB,CAA0B,wBAAwB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","FolderLevelPermissions"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CanAccessFolderContentParams, CanAccessFolderParams } from \"./useCases/index.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\n\nexport interface IFolderLevelPermissions {\n canUseFolderLevelPermissions(enabled?: boolean): boolean;\n canUseTeams(): boolean;\n canCreateFolderInRoot(): boolean;\n permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean;\n canAccessFolder(params: CanAccessFolderParams): Promise<boolean>;\n canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean>;\n ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void>;\n ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void>;\n canManageFolderContent(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean>;\n getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]>;\n listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n >;\n getFolderLevelPermissions(id: string): Promise<FolderPermission[]>;\n}\n\n/** Manage folder-level access control. */\nexport const FolderLevelPermissions =\n createAbstraction<IFolderLevelPermissions>(\"FolderLevelPermissions\");\n\nexport namespace FolderLevelPermissions {\n export type Interface = IFolderLevelPermissions;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AA0BvD;AACA,OAAO,MAAMC,sBAAsB,GAC/BD,iBAAiB,CAA0B,wBAAwB,CAAC","ignoreList":[]}
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Container } from "@webiny/di";
|
|
2
|
+
export declare const FolderLevelPermissionsFeature: {
|
|
3
|
+
name: string;
|
|
4
|
+
register(container: Container): void;
|
|
5
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
1
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
2
|
import type { CanAccessFolderParams, ICanAccessFolder } from "./ICanAccessFolder.js";
|
|
3
3
|
export declare class CanAccessFolder implements ICanAccessFolder {
|
|
4
4
|
private identityContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CanAccessFolder","constructor","identityContext","execute","permissions","rwd","managePermissions","length","identity","getIdentity","currentIdentityPermission","find","p","target","id","level"],"sources":["CanAccessFolder.ts"],"sourcesContent":["import { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport type { CanAccessFolderParams, ICanAccessFolder } from \"./ICanAccessFolder.js\";\n\nexport class CanAccessFolder implements ICanAccessFolder {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute({ permissions = [], rwd, managePermissions }: CanAccessFolderParams) {\n if (!permissions.length) {\n return true;\n }\n\n const identity = this.identityContext.getIdentity();\n const currentIdentityPermission = permissions.find(p => {\n return p.target === `admin:${identity.id}`;\n });\n\n if (!currentIdentityPermission) {\n return false;\n }\n\n const { level } = currentIdentityPermission;\n\n if (managePermissions) {\n return level === \"owner\";\n }\n\n // If the user has a `no-access` level, they are explicitly denied access to the current folder.\n if (level === \"no-access\") {\n return false;\n }\n\n // Checking for \"write\" or \"delete\" access. Allow only if the\n // user is has `owner` or `editor` level or the folder is public (no FLP assigned).\n if (rwd !== \"r\") {\n return level === \"owner\" || level === \"editor\" || level === \"public\";\n }\n\n return true;\n }\n}\n"],"mappings":"AAGA,OAAO,MAAMA,eAAe,CAA6B;EACrDC,WAAWA,CAASC,eAA0C,EAAE;IAAA,KAA5CA,eAA0C,GAA1CA,eAA0C;EAAG;EAEjE,MAAMC,OAAOA,CAAC;IAAEC,WAAW,GAAG,EAAE;IAAEC,GAAG;IAAEC;EAAyC,CAAC,EAAE;IAC/E,IAAI,CAACF,WAAW,CAACG,MAAM,EAAE;MACrB,OAAO,IAAI;IACf;IAEA,MAAMC,QAAQ,GAAG,IAAI,CAACN,eAAe,CAACO,WAAW,CAAC,CAAC;IACnD,MAAMC,yBAAyB,GAAGN,WAAW,CAACO,IAAI,CAACC,CAAC,IAAI;MACpD,OAAOA,CAAC,CAACC,MAAM,KAAK,SAASL,QAAQ,CAACM,EAAE,EAAE;IAC9C,CAAC,CAAC;IAEF,IAAI,CAACJ,yBAAyB,EAAE;MAC5B,OAAO,KAAK;IAChB;IAEA,MAAM;MAAEK;IAAM,CAAC,GAAGL,yBAAyB;IAE3C,IAAIJ,iBAAiB,EAAE;MACnB,OAAOS,KAAK,KAAK,OAAO;IAC5B;;IAEA;IACA,IAAIA,KAAK,KAAK,WAAW,EAAE;MACvB,OAAO,KAAK;IAChB;;IAEA;IACA;IACA,IAAIV,GAAG,KAAK,GAAG,EAAE;MACb,OAAOU,KAAK,KAAK,OAAO,IAAIA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,QAAQ;IACxE;IAEA,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["CanAccessFolder","constructor","identityContext","execute","permissions","rwd","managePermissions","length","identity","getIdentity","currentIdentityPermission","find","p","target","id","level"],"sources":["CanAccessFolder.ts"],"sourcesContent":["import { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CanAccessFolderParams, ICanAccessFolder } from \"./ICanAccessFolder.js\";\n\nexport class CanAccessFolder implements ICanAccessFolder {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute({ permissions = [], rwd, managePermissions }: CanAccessFolderParams) {\n if (!permissions.length) {\n return true;\n }\n\n const identity = this.identityContext.getIdentity();\n const currentIdentityPermission = permissions.find(p => {\n return p.target === `admin:${identity.id}`;\n });\n\n if (!currentIdentityPermission) {\n return false;\n }\n\n const { level } = currentIdentityPermission;\n\n if (managePermissions) {\n return level === \"owner\";\n }\n\n // If the user has a `no-access` level, they are explicitly denied access to the current folder.\n if (level === \"no-access\") {\n return false;\n }\n\n // Checking for \"write\" or \"delete\" access. Allow only if the\n // user is has `owner` or `editor` level or the folder is public (no FLP assigned).\n if (rwd !== \"r\") {\n return level === \"owner\" || level === \"editor\" || level === \"public\";\n }\n\n return true;\n }\n}\n"],"mappings":"AAGA,OAAO,MAAMA,eAAe,CAA6B;EACrDC,WAAWA,CAASC,eAA0C,EAAE;IAAA,KAA5CA,eAA0C,GAA1CA,eAA0C;EAAG;EAEjE,MAAMC,OAAOA,CAAC;IAAEC,WAAW,GAAG,EAAE;IAAEC,GAAG;IAAEC;EAAyC,CAAC,EAAE;IAC/E,IAAI,CAACF,WAAW,CAACG,MAAM,EAAE;MACrB,OAAO,IAAI;IACf;IAEA,MAAMC,QAAQ,GAAG,IAAI,CAACN,eAAe,CAACO,WAAW,CAAC,CAAC;IACnD,MAAMC,yBAAyB,GAAGN,WAAW,CAACO,IAAI,CAACC,CAAC,IAAI;MACpD,OAAOA,CAAC,CAACC,MAAM,KAAK,SAASL,QAAQ,CAACM,EAAE,EAAE;IAC9C,CAAC,CAAC;IAEF,IAAI,CAACJ,yBAAyB,EAAE;MAC5B,OAAO,KAAK;IAChB;IAEA,MAAM;MAAEK;IAAM,CAAC,GAAGL,yBAAyB;IAE3C,IAAIJ,iBAAiB,EAAE;MACnB,OAAOS,KAAK,KAAK,OAAO;IAC5B;;IAEA;IACA,IAAIA,KAAK,KAAK,WAAW,EAAE;MACvB,OAAO,KAAK;IAChB;;IAEA;IACA;IACA,IAAIV,GAAG,KAAK,GAAG,EAAE;MACb,OAAOU,KAAK,KAAK,OAAO,IAAIA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,QAAQ;IACxE;IAEA,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
1
|
+
import type { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
2
|
import type { CanAccessFolderContentParams, ICanAccessFolderContent } from "./ICanAccessFolderContent.js";
|
|
3
3
|
export declare class CanAccessFolderContent implements ICanAccessFolderContent {
|
|
4
4
|
private identityContext;
|