diff --git a/src/Controller/HistoryController.php b/src/Controller/HistoryController.php index 20800612f..e36d86042 100644 --- a/src/Controller/HistoryController.php +++ b/src/Controller/HistoryController.php @@ -29,7 +29,7 @@ public function __construct(private readonly HistoryServiceInterface $historySer { } - #[Route(path: '/api/migration/get-grouped-logs-of-run', name: 'api.admin.migration.get-grouped-logs-of-run', methods: ['GET'], defaults: ['_acl' => ['admin']])] + #[Route(path: '/api/migration/get-grouped-logs-of-run', name: 'api.admin.migration.get-grouped-logs-of-run', methods: ['GET'], defaults: ['_acl' => ['swag_migration.viewer']])] public function getGroupedLogsOfRun(Request $request, Context $context): JsonResponse { $runUuid = $request->query->getAlnum('runUuid'); @@ -54,7 +54,7 @@ public function getGroupedLogsOfRun(Request $request, Context $context): JsonRes ]); } - #[Route(path: '/api/_action/migration/download-logs-of-run', name: 'api.admin.migration.download-logs-of-run', methods: ['POST'], defaults: ['auth_required' => false, '_acl' => ['admin']])] + #[Route(path: '/api/_action/migration/download-logs-of-run', name: 'api.admin.migration.download-logs-of-run', methods: ['POST'], defaults: ['auth_required' => false, '_acl' => ['swag_migration.viewer']])] public function downloadLogsOfRun(Request $request, Context $context): StreamedResponse { $runUuid = $request->request->getAlnum('runUuid'); @@ -80,7 +80,7 @@ public function downloadLogsOfRun(Request $request, Context $context): StreamedR return $response; } - #[Route(path: '/api/_action/migration/clear-data-of-run', name: 'api.admin.migration.clear-data-of-run', methods: ['POST'], defaults: ['_acl' => ['admin']])] + #[Route(path: '/api/_action/migration/clear-data-of-run', name: 'api.admin.migration.clear-data-of-run', methods: ['POST'], defaults: ['_acl' => ['swag_migration.deleter']])] public function clearDataOfRun(Request $request, Context $context): Response { $runUuid = $request->request->getAlnum('runUuid'); @@ -98,7 +98,7 @@ public function clearDataOfRun(Request $request, Context $context): Response return new Response(); } - #[Route(path: '/api/_action/migration/is-media-processing', name: 'api.admin.migration.is-media-processing', methods: ['GET'], defaults: ['_acl' => ['admin']])] + #[Route(path: '/api/_action/migration/is-media-processing', name: 'api.admin.migration.is-media-processing', methods: ['GET'], defaults: ['_acl' => ['swag_migration_history:read']])] public function isMediaProcessing(): JsonResponse { $result = $this->historyService->isMediaProcessing(); diff --git a/src/Controller/PremappingController.php b/src/Controller/PremappingController.php index 87f33621a..9f73e6068 100644 --- a/src/Controller/PremappingController.php +++ b/src/Controller/PremappingController.php @@ -28,7 +28,7 @@ public function __construct( ) { } - #[Route(path: '/api/_action/migration/generate-premapping', name: 'api.admin.migration.generate-premapping', methods: ['POST'], defaults: ['_acl' => ['admin']])] + #[Route(path: '/api/_action/migration/generate-premapping', name: 'api.admin.migration.generate-premapping', methods: ['POST'], defaults: ['_acl' => ['swag_migration.editor']])] public function generatePremapping(Request $request, Context $context): JsonResponse { $dataSelectionIds = $request->request->all('dataSelectionIds'); @@ -41,7 +41,7 @@ public function generatePremapping(Request $request, Context $context): JsonResp return new JsonResponse($this->premappingService->generatePremapping($context, $migrationContext, $dataSelectionIds)); } - #[Route(path: '/api/_action/migration/write-premapping', name: 'api.admin.migration.write-premapping', methods: ['POST'], defaults: ['_acl' => ['admin']])] + #[Route(path: '/api/_action/migration/write-premapping', name: 'api.admin.migration.write-premapping', methods: ['POST'], defaults: ['_acl' => ['swag_migration.editor']])] public function writePremapping(Request $request, Context $context): Response { $premapping = $request->request->all('premapping'); diff --git a/src/Controller/StatusController.php b/src/Controller/StatusController.php index 677f9678e..2c61993c7 100644 --- a/src/Controller/StatusController.php +++ b/src/Controller/StatusController.php @@ -50,7 +50,7 @@ public function __construct( #[Route( path: '/api/_action/migration/get-profile-information', name: 'api.admin.migration.get-profile-information', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function getProfileInformation(Request $request): Response @@ -117,7 +117,7 @@ public function getProfileInformation(Request $request): Response #[Route( path: '/api/_action/migration/get-profiles', name: 'api.admin.migration.get-profiles', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function getProfiles(): JsonResponse @@ -140,7 +140,7 @@ public function getProfiles(): JsonResponse #[Route( path: '/api/_action/migration/get-gateways', name: 'api.admin.migration.get-gateways', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function getGateways(Request $request): JsonResponse @@ -168,7 +168,7 @@ public function getGateways(Request $request): JsonResponse #[Route( path: '/api/_action/migration/update-connection-credentials', name: 'api.admin.migration.update-connection-credentials', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.editor']], methods: [Request::METHOD_POST] )] public function updateConnectionCredentials(Request $request, Context $context): Response @@ -195,7 +195,7 @@ public function updateConnectionCredentials(Request $request, Context $context): #[Route( path: '/api/_action/migration/data-selection', name: 'api.admin.migration.data-selection', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function getDataSelection(Request $request, Context $context): JsonResponse @@ -222,7 +222,7 @@ public function getDataSelection(Request $request, Context $context): JsonRespon #[Route( path: '/api/_action/migration/check-connection', name: 'api.admin.migration.check-connection', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_POST] )] public function checkConnection(Request $request, Context $context): JsonResponse @@ -248,7 +248,7 @@ public function checkConnection(Request $request, Context $context): JsonRespons #[Route( path: '/api/_action/migration/start-migration', name: 'api.admin.migration.start-migration', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.creator']], methods: [Request::METHOD_POST] )] public function startMigration(Request $request, Context $context): Response @@ -281,7 +281,7 @@ public function startMigration(Request $request, Context $context): Response #[Route( path: '/api/_action/migration/get-state', name: 'api.admin.migration.get-state', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function getState(Context $context): JsonResponse @@ -292,7 +292,7 @@ public function getState(Context $context): JsonResponse #[Route( path: '/api/_action/migration/approve-finished', name: 'api.admin.migration.approveFinished', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.editor']], methods: [Request::METHOD_POST] )] public function approveFinishedMigration(Context $context): Response @@ -313,7 +313,7 @@ public function approveFinishedMigration(Context $context): Response #[Route( path: '/api/_action/migration/abort-migration', name: 'api.admin.migration.abort-migration', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.editor']], methods: [Request::METHOD_POST] )] public function abortMigration(Context $context): Response @@ -330,7 +330,7 @@ public function abortMigration(Context $context): Response #[Route( path: '/api/_action/migration/reset-checksums', name: 'api.admin.migration.reset-checksums', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.deleter']], methods: [Request::METHOD_POST] )] public function resetChecksums(Request $request, Context $context): Response @@ -349,7 +349,7 @@ public function resetChecksums(Request $request, Context $context): Response #[Route( path: '/api/_action/migration/cleanup-migration-data', name: 'api.admin.migration.cleanup-migration-data', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.deleter']], methods: [Request::METHOD_POST] )] public function cleanupMigrationData(Context $context): Response @@ -360,9 +360,9 @@ public function cleanupMigrationData(Context $context): Response } #[Route( - path: '/api/_action/migration/is-truncating-migration-data', - name: 'api.admin.migration.is-truncating-migration-data', - defaults: ['_acl' => ['admin']], + path: '/api/_action/migration/get-reset-status', + name: 'api.admin.migration.get-reset-status', + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function isTruncatingMigrationData(Context $context): JsonResponse @@ -379,7 +379,7 @@ public function isTruncatingMigrationData(Context $context): JsonResponse #[Route( path: '/api/_action/migration/is-resetting-checksums', name: 'api.admin.migration.is-resetting-checksums', - defaults: ['_acl' => ['admin']], + defaults: ['_acl' => ['swag_migration.viewer']], methods: [Request::METHOD_GET] )] public function isResettingChecksums(Context $context): JsonResponse diff --git a/src/Resources/app/administration/src/module/swag-migration/acl/index.ts b/src/Resources/app/administration/src/module/swag-migration/acl/index.ts new file mode 100644 index 000000000..971f38cd6 --- /dev/null +++ b/src/Resources/app/administration/src/module/swag-migration/acl/index.ts @@ -0,0 +1,81 @@ +const MIGRATION_ACL_KEY = 'swag_migration'; + +const acl = { + category: 'permissions', + parent: 'settings', + key: MIGRATION_ACL_KEY, + roles: { + viewer: { + privileges: [ + 'swag_migration_connection:read', + 'swag_migration_data:read', + 'swag_migration_fix:read', + 'swag_migration_general_setting:read', + 'swag_migration_logging:read', + 'swag_migration_mapping:read', + 'swag_migration_media_file:read', + 'swag_migration_run:read', + 'swag_migration_history:read', + 'system_config:read', + ], + dependencies: [], + }, + editor: { + privileges: [ + 'swag_migration_connection:update', + 'swag_migration_data:update', + 'swag_migration_fix:update', + 'swag_migration_general_setting:update', + 'swag_migration_logging:update', + 'swag_migration_mapping:update', + 'swag_migration_media_file:update', + 'swag_migration_run:update', + 'swag_migration_history:update', + ], + dependencies: [ + 'swag_migration.viewer', + ], + }, + creator: { + privileges: [ + 'swag_migration_connection:create', + 'swag_migration_data:create', + 'swag_migration_fix:create', + 'swag_migration_general_setting:create', + 'swag_migration_logging:create', + 'swag_migration_mapping:create', + 'swag_migration_media_file:create', + 'swag_migration_run:create', + 'swag_migration_history:create', + ], + dependencies: [ + 'swag_migration.viewer', + 'swag_migration.editor', + ], + }, + deleter: { + privileges: [ + 'swag_migration_connection:delete', + 'swag_migration_data:delete', + 'swag_migration_fix:delete', + 'swag_migration_general_setting:delete', + 'swag_migration_logging:delete', + 'swag_migration_mapping:delete', + 'swag_migration_media_file:delete', + 'swag_migration_run:delete', + 'swag_migration_history:delete', + ], + dependencies: [ + 'swag_migration.viewer', + ], + }, + }, +}; + +Shopware.Service('privileges').addPrivilegeMappingEntry(acl); + +/** + * @private + * @sw-package fundamentals@after-sales + */ +export { MIGRATION_ACL_KEY, acl }; diff --git a/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/index.ts b/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/index.ts index 865728fce..53d19ec23 100644 --- a/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/index.ts +++ b/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/index.ts @@ -54,6 +54,7 @@ export default Shopware.Component.wrapComponentConfig({ inject: [ MIGRATION_API_SERVICE, 'repositoryFactory', + 'acl', ], mixins: [ diff --git a/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/swag-migration-shop-information.html.twig b/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/swag-migration-shop-information.html.twig index 431cd8d57..afac4e53f 100644 --- a/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/swag-migration-shop-information.html.twig +++ b/src/Resources/app/administration/src/module/swag-migration/component/card/swag-migration-shop-information/swag-migration-shop-information.html.twig @@ -93,6 +93,7 @@ class="swag-migration-shop-information__actions-initial" size="small" variant="secondary" + :disabled="!acl.can('swag_migration.creator')" @click="onClickCreateInitialConnection" > {{ $tc('swag-migration.index.shopInfoCard.buttonCreateInitialConnection') }} @@ -103,6 +104,7 @@ class="swag-migration-shop-information__actions-edit" size="small" variant="secondary" + :disabled="!acl.can('swag_migration.editor')" @click="onClickEditConnectionCredentials" > {{ $tc('swag-migration.index.shopInfoCard.buttonEditSettings') }} @@ -124,33 +126,50 @@ {% block swag_migration_shop_information_actions_refreshConnection %} - + {{ $tc('swag-migration.index.shopInfoCard.refreshButton') }} {% endblock %} {% block swag_migration_shop_information_actions_createConnectionItem %} - + {{ $tc('swag-migration.index.shopInfoCard.buttonCreateConnection') }} {% endblock %} {% block swag_migration_shop_information_actions_selectConnectionItem %} - + {{ $tc('swag-migration.index.shopInfoCard.buttonSelectConnection') }} {% endblock %} {% block swag_migration_shop_information_actions_profileInstallationItem %} - + {{ $tc('swag-migration.index.shopInfoCard.buttonProfileInstallation') }} {% endblock %} + {% block swag_migration_shop_information_actions_divider %} + + {% endblock %} + {% block swag_migration_shop_information_actions_removeCredentialsItem %} {{ $tc('swag-migration.index.shopInfoCard.buttonRemoveCredentials') }} @@ -160,19 +179,17 @@ {{ $tc('swag-migration.index.shopInfoCard.buttonResetChecksums') }} {% endblock %} - {% block swag_migration_shop_information_actions_divider %} - - {% endblock %} - {% block swag_migration_shop_information_actions_resetMigrationItem %} {{ $tc('swag-migration.index.shopInfoCard.buttonResetMigration') }} @@ -310,7 +327,7 @@ {{ $tc('swag-migration.index.shopInfoCard.removeCredentialsConfirmDialog.confirmButtonText') }} @@ -361,7 +378,7 @@ {{ $tc('swag-migration.index.shopInfoCard.resetChecksumsConfirmDialog.confirmButtonText') }} @@ -414,7 +431,7 @@ {{ $tc('swag-migration.index.shopInfoCard.resetMigrationConfirmDialog.confirmButtonText') }} diff --git a/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/index.ts b/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/index.ts index 07b982734..4791c3836 100644 --- a/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/index.ts +++ b/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/index.ts @@ -49,7 +49,7 @@ export default Shopware.Component.wrapComponentConfig({ async createdComponent() { this.$super('createdComponent'); - if (!this.acl.isAdmin()) { + if (!this.acl.can('swag_migration.viewer')) { this.loading = false; return; } diff --git a/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/sw-dashboard-index.html.twig b/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/sw-dashboard-index.html.twig index f749fc833..76f14a151 100644 --- a/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/sw-dashboard-index.html.twig +++ b/src/Resources/app/administration/src/module/swag-migration/extension/sw-dashboard-index/sw-dashboard-index.html.twig @@ -4,7 +4,7 @@ {% block swag_migration_dashboard_card %} {% block sw_dashboard_index_content_migration_card %} - + {% endblock %} {% endblock %} {% endblock %} diff --git a/src/Resources/app/administration/src/module/swag-migration/index.ts b/src/Resources/app/administration/src/module/swag-migration/index.ts index 149cad776..2e78e5816 100644 --- a/src/Resources/app/administration/src/module/swag-migration/index.ts +++ b/src/Resources/app/administration/src/module/swag-migration/index.ts @@ -1,7 +1,8 @@ -import './mixin/swag-wizard.mixin'; +import './acl'; import './component'; -import './page'; import './extension'; +import './mixin/swag-wizard.mixin'; +import './page'; import './profile'; import './store/migration.store'; @@ -14,8 +15,6 @@ Shopware.Module.register('swag-migration', { name: 'swag-migration', title: 'swag-migration.general.mainMenuItemGeneral', description: 'swag-migration.general.descriptionTextModule', - version: '0.9.0', - targetVersion: '0.9.0', color: '#9AA8B5', icon: 'regular-cog', @@ -25,6 +24,7 @@ Shopware.Module.register('swag-migration', { path: 'index', meta: { parentPath: 'sw.settings.index', + privilege: 'swag_migration.viewer', }, redirect: { name: 'swag.migration.index.main' }, children: { @@ -34,7 +34,7 @@ Shopware.Module.register('swag-migration', { meta: { parentPath: 'sw.settings.index', resetMigration: false, - privilege: 'admin', + privilege: 'swag_migration.viewer', }, }, resetMigration: { @@ -43,7 +43,7 @@ Shopware.Module.register('swag-migration', { meta: { parentPath: 'sw.settings.index', resetMigration: true, - privilege: 'admin', + privilege: 'swag_migration.deleter', }, }, history: { @@ -55,13 +55,13 @@ Shopware.Module.register('swag-migration', { component: 'swag-migration-history-detail', meta: { parentPath: 'sw.settings.index', - privilege: 'admin', + privilege: 'swag_migration.viewer', }, }, }, meta: { parentPath: 'sw.settings.index', - privilege: 'admin', + privilege: 'swag_migration.viewer', }, }, dataSelector: { @@ -69,7 +69,7 @@ Shopware.Module.register('swag-migration', { component: 'swag-migration-data-selector', meta: { parentPath: 'sw.settings.index', - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, }, @@ -79,7 +79,7 @@ Shopware.Module.register('swag-migration', { component: 'swag-migration-process-screen', meta: { parentPath: 'sw.settings.index', - privilege: 'admin', + privilege: 'swag_migration.viewer', }, }, wizard: { @@ -91,55 +91,52 @@ Shopware.Module.register('swag-migration', { path: 'introduction', component: 'swag-migration-wizard-page-introduction', meta: { - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, profileInstallation: { path: 'profile/installation', component: 'swag-migration-wizard-page-profile-installation', meta: { - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, connectionCreate: { path: 'connection/create', component: 'swag-migration-wizard-page-connection-create', meta: { - privilege: 'admin', + privilege: 'swag_migration.creator', }, }, connectionSelect: { path: 'connection/select', component: 'swag-migration-wizard-page-connection-select', meta: { - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, credentials: { path: 'credentials', component: 'swag-migration-wizard-page-credentials', meta: { - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, credentialsSuccess: { path: 'credentials/success', component: 'swag-migration-wizard-page-credentials-success', meta: { - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, credentialsError: { path: 'credentials/error', component: 'swag-migration-wizard-page-credentials-error', meta: { - privilege: 'admin', + privilege: 'swag_migration.editor', }, }, }, - meta: { - privilege: 'admin', - }, }, }, @@ -147,6 +144,6 @@ Shopware.Module.register('swag-migration', { group: 'plugins', to: 'swag.migration.index', iconComponent: 'swag-migration-settings-icon', - privilege: 'admin', + privilege: 'swag_migration.viewer', }, }); diff --git a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/index.ts b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/index.ts index 9dc812142..af6104ecb 100644 --- a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/index.ts +++ b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/index.ts @@ -58,6 +58,7 @@ export default Shopware.Component.wrapComponentConfig({ inject: [ MIGRATION_API_SERVICE, 'repositoryFactory', + 'acl', ], mixins: [ diff --git a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/swag-migration-history.html.twig b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/swag-migration-history.html.twig index 65991ba82..180a24b18 100644 --- a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/swag-migration-history.html.twig +++ b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-history/swag-migration-history.html.twig @@ -66,12 +66,16 @@ {{ $tc('swag-migration.history.contextMenu.details') }} + {{ $tc('swag-migration.history.contextMenu.downloadLogs') }} - + + {{ $tc('swag-migration.history.contextMenu.clearLogs') }} @@ -142,7 +146,7 @@ {{ $tc('global.default.delete') }} diff --git a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/index.ts b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/index.ts index 0da84f28e..0b688fbb2 100644 --- a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/index.ts +++ b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/index.ts @@ -11,6 +11,7 @@ export default Shopware.Component.wrapComponentConfig({ inject: [ 'repositoryFactory', + 'acl', ], computed: { diff --git a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/swag-migration-index.html.twig b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/swag-migration-index.html.twig index 8b1ae6706..03444bd92 100644 --- a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/swag-migration-index.html.twig +++ b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-index/swag-migration-index.html.twig @@ -17,6 +17,7 @@ {{ $tc('swag-migration.general.tabDataSelector') }} diff --git a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/index.ts b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/index.ts index 1c08ea455..8584de300 100644 --- a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/index.ts +++ b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/index.ts @@ -53,6 +53,7 @@ export default Shopware.Component.wrapComponentConfig({ inject: [ MIGRATION_API_SERVICE, + 'acl', ], mixins: [ @@ -107,7 +108,7 @@ export default Shopware.Component.wrapComponentConfig({ }, abortButtonDisabled() { - return this.isLoading || this.step === MIGRATION_STEP.ABORTING; + return this.isLoading || this.step === MIGRATION_STEP.ABORTING || !this.acl.can('swag_migration.editor'); }, componentIndexIsResult() { diff --git a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/swag-migration-process-screen.html.twig b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/swag-migration-process-screen.html.twig index e0bd5f2fb..8d863ac41 100644 --- a/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/swag-migration-process-screen.html.twig +++ b/src/Resources/app/administration/src/module/swag-migration/page/swag-migration-process-screen/swag-migration-process-screen.html.twig @@ -103,6 +103,7 @@ {{ $tc('swag-migration.index.confirmAbortDialog.confirm') }} diff --git a/src/Resources/app/administration/src/module/swag-migration/snippet/de.json b/src/Resources/app/administration/src/module/swag-migration/snippet/de.json index c9e5aef3c..0d6b3b621 100644 --- a/src/Resources/app/administration/src/module/swag-migration/snippet/de.json +++ b/src/Resources/app/administration/src/module/swag-migration/snippet/de.json @@ -18,6 +18,7 @@ "tabHistory": "Historie", "tabDataSelector": "Datenauswahl", "disabledMessages": { + "noPermission": "Es fehlen die erforderlichen Berechtigungen, um eine Migration durchzuführen.", "noData": "Es sind keine Daten für die Migration verfügbar.", "resettingChecksum": "Die Prüfsummen werden derzeit zurückgesetzt.", "truncatingMigration": "Migrationsdaten werden zurzeit geleert.", @@ -643,6 +644,13 @@ "abortMigration": "Fehler beim Abbrechen der Migration" } }, + "sw-privileges": { + "permissions": { + "swag_migration": { + "label": "Migration Assistant" + } + } + }, "global": { "error-codes": { "SWAG_MIGRATION_CONNECTION_NAME_ALREADY_EXISTS": "Der Verbindungsname existiert bereits.", diff --git a/src/Resources/app/administration/src/module/swag-migration/snippet/en.json b/src/Resources/app/administration/src/module/swag-migration/snippet/en.json index 8e4a9b68a..782e4e50a 100644 --- a/src/Resources/app/administration/src/module/swag-migration/snippet/en.json +++ b/src/Resources/app/administration/src/module/swag-migration/snippet/en.json @@ -18,6 +18,7 @@ "tabHistory": "History", "tabDataSelector": "Data selection", "disabledMessages": { + "noPermission": "You do not have the required permissions to perform a migration.", "noData": "There is no data available for migration.", "resettingChecksum": "Checksums are currently being reset.", "truncatingMigration": "Migration data is currently being truncated.", @@ -664,6 +665,13 @@ "abortMigration": "Failed to abort migration." } }, + "sw-privileges": { + "permissions": { + "swag_migration": { + "label": "Migration Assistant" + } + } + }, "global": { "error-codes": { "SWAG_MIGRATION_CONNECTION_NAME_ALREADY_EXISTS": "Connection name already exists.", diff --git a/src/Resources/app/administration/src/module/swag-migration/store/migration.store.ts b/src/Resources/app/administration/src/module/swag-migration/store/migration.store.ts index 7d80f3575..708f50f72 100644 --- a/src/Resources/app/administration/src/module/swag-migration/store/migration.store.ts +++ b/src/Resources/app/administration/src/module/swag-migration/store/migration.store.ts @@ -145,6 +145,10 @@ const migrationStore = Shopware.Store.register({ }, migrationDisabledMessage(): string | null { + if (!Shopware.Service('acl').can('swag_migration.creator')) { + return Shopware.Snippet.tc('swag-migration.general.disabledMessages.noPermission'); + } + if (!this.dataSelectionTableData.length) { return Shopware.Snippet.tc('swag-migration.general.disabledMessages.noData'); }