Skip to content
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
3528d15
PES-2876: permissions update
Aug 4, 2025
1663a89
PES-2876: permissions update - carrier forms permission check
Aug 6, 2025
c09000c
PES-2876: permissions update - Refactor permission checks to use User…
Aug 7, 2025
ca0da6e
PES-2876: permissions update - Refactor permission checks to use canU…
Aug 11, 2025
ccd48c0
PES-2876: permissions update - Refactor permission checks to use depe…
Aug 11, 2025
9a61e79
PES-2886: Add PHPDocs for UserPermissionHelper
Karpec Aug 14, 2025
d1983b2
PES-2886: Improve validation logic in UserPermissionHelper
Karpec Aug 14, 2025
ba3085a
PES-2886: Refactor UserPermissionHelper to use DbTools for improved q…
Karpec Aug 14, 2025
8c46599
fixup! PES-2886: Refactor UserPermissionHelper to use DbTools for imp…
Karpec Aug 14, 2025
2f901b1
PES-2886: Adjust visibility of constants in UserPermissionHelper for …
Karpec Aug 14, 2025
0660574
PES-2886: Use constants in UserPermissionHelper for better readability
Karpec Aug 14, 2025
15c0bf6
PES-2886: Reformat conditional for readability in packetery.php
Karpec Aug 14, 2025
816206e
PES-2886: Remove unnecessary blank line in PacketeryOrderGridControll…
Karpec Aug 14, 2025
44ca79d
PES-2886: Update conditional to use strict comparison in packetery.php
Karpec Aug 14, 2025
9f31a64
PES-2886: Inject Packetery module into UserPermissionHelper for bette…
Karpec Aug 14, 2025
98cfe56
fixup! PES-2886: Inject Packetery module into UserPermissionHelper fo…
Karpec Aug 14, 2025
5991702
PES-2886: Simplify user permission logic in packetery.php for maintai…
Karpec Aug 14, 2025
76b4611
PES-2886: Move configuration submission handling to ConfigurationForm…
Karpec Aug 14, 2025
ebed9fa
fixup! PES-2886: Move configuration submission handling to Configurat…
Karpec Aug 15, 2025
7b003ae
fixup! PES-2886: Refactor UserPermissionHelper to use DbTools for imp…
Karpec Aug 15, 2025
c0c90aa
fixup! PES-2886: Reformat conditional for readability in packetery.php
Karpec Aug 15, 2025
d1ae744
PES-2886: Extract database query logic to UserPermissionRepository
Karpec Aug 15, 2025
93cf02a
fixup! PES-2886: Extract database query logic to UserPermissionReposi…
Karpec Aug 15, 2025
2e6051e
fixup! fixup! PES-2886: Extract database query logic to UserPermissio…
Karpec Aug 15, 2025
a6922a3
PES-2886: Move UserPermissionHelper to a dedicated namespace
Karpec Aug 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions packetery/controllers/admin/PacketeryCarrierGridController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Packetery\Carrier\CarrierTools;
use Packetery\Module\VersionChecker;
use Packetery\Tools\MessageManager;
use Packetery\Tools\UserPermissionHelper;

class PacketeryCarrierGridController extends ModuleAdminController
{
Expand Down Expand Up @@ -44,6 +45,13 @@ public function __construct()
// for $this->translator not being null, in PS 1.6
parent::__construct();

/** @var UserPermissionHelper $userPermissionHelper */
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CARRIERS, UserPermissionHelper::PERMISSION_VIEW)) {
$this->errors[] = $this->l('You do not have permission to access Packeta carriers. Access denied.', 'packeterycarriergridcontroller');
return;
}

$module = $this->getModule();

/** @var ApiCarrierRepository $apiCarrierRepository */
Expand Down Expand Up @@ -162,9 +170,8 @@ public function renderView()
$carrierHelper->build();
if ($carrierHelper->getError()) {
$this->errors[] = $carrierHelper->getError();
} else {
$this->tpl_view_vars['carrierHelper'] = $carrierHelper->getHtml();
}
$this->tpl_view_vars['carrierHelper'] = $carrierHelper->getHtml();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Proč je tato změna potřeba?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aby se zobrazoval obsah stránky pokud dojde k chybě.

}
return parent::renderView();
}
Expand All @@ -173,6 +180,13 @@ public function initToolbar()
{
parent::initToolbar();
unset($this->toolbar_btn['new']);

/** @var UserPermissionHelper $userPermissionHelper */
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);

if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CARRIERS, UserPermissionHelper::PERMISSION_EDIT)) {
unset($this->toolbar_btn['bulk_action']);
}
}

/**
Expand Down
7 changes: 7 additions & 0 deletions packetery/controllers/admin/PacketeryLogGridController.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

use Packetery\Log\LogRepository;
use Packetery\Tools\UserPermissionHelper;

class PacketeryLogGridController extends ModuleAdminController
{
Expand Down Expand Up @@ -38,6 +39,12 @@ public function __construct()

parent::__construct();

$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_LOG, UserPermissionHelper::PERMISSION_VIEW)) {
$this->errors[] = $this->l('You do not have permission to access Packeta logs. Access denied.', 'packeteryloggridcontroller');
return;
}

$this->logRepository = $this->getModule()->diContainer->get(LogRepository::class);

$this->fields_list = [
Expand Down
54 changes: 53 additions & 1 deletion packetery/controllers/admin/PacketeryOrderGridController.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
use Packetery\Order\Tracking;
use Packetery\PacketTracking\PacketStatusFactory;
use Packetery\Tools\ConfigHelper;
use Packetery\Tools\UserPermissionHelper;

class PacketeryOrderGridController extends ModuleAdminController
{
Expand Down Expand Up @@ -109,6 +110,12 @@ public function __construct()
// for $this->translator not being null, in PS 1.6
parent::__construct();

$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_VIEW)) {
$this->errors[] = $this->l('You do not have permission to access Packeta orders. Access denied.', 'packeteryordergridcontroller');
return;
}

$this->fields_list = [
'id_order' => [
'title' => $this->l('ID', 'packeteryordergridcontroller'),
Expand Down Expand Up @@ -234,6 +241,12 @@ private function createPackets(array $ids)

public function processBulkCreatePacket()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->errors[] = $this->l('You do not have permission to submit shipment.', 'packeteryordergridcontroller');
return;
}

$ids = $this->boxes;
if (!$ids) {
$this->informations = $this->l('No orders were selected.', 'packeteryordergridcontroller');
Expand All @@ -244,6 +257,12 @@ public function processBulkCreatePacket()

public function processSubmit()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->errors[] = $this->l('You do not have permission to submit shipment.', 'packeteryordergridcontroller');
return;
}

$this->createPackets([Tools::getValue('id_order')]);
}

Expand Down Expand Up @@ -339,6 +358,12 @@ private function prepareLabels(array $packetNumbers, $type, $packetsEnhanced = n
*/
public function processBulkLabelPdf()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->errors[] = $this->l('You do not have permission to print labels.', 'packeteryordergridcontroller');
return;
}

if (Tools::isSubmit('submitPrepareLabels')) {
$packetNumbers = $this->prepareOnlyInternalPacketNumbers($this->boxes);
if ($packetNumbers) {
Expand All @@ -358,6 +383,12 @@ public function processBulkLabelPdf()
*/
public function processBulkCarrierLabelPdf()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->errors[] = $this->l('You do not have permission to print carrier labels.', 'packeteryordergridcontroller');
return;
}

if (Tools::isSubmit('submitPrepareLabels')) {
$packetNumbers = $this->prepareOnlyCarrierPacketNumbers($this->boxes);
if ($packetNumbers) {
Expand All @@ -384,6 +415,12 @@ public function processBulkCarrierLabelPdf()
*/
public function processPrint()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->errors[] = $this->l('You do not have permission to print label.', 'packeteryordergridcontroller');
return;
}

/** @var OrderRepository $orderRepo */
$orderRepository = $this->getModule()->diContainer->get(OrderRepository::class);
$orderData = $orderRepository->getById((int)Tools::getValue('id_order'));
Expand All @@ -410,6 +447,12 @@ public function processPrint()

public function processBulkCsvExport()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_VIEW)) {
$this->errors[] = $this->l('You do not have permission to access Packeta orders. Access denied.', 'packeteryordergridcontroller');
return;
}

if ((int)Tools::getValue('submitFilterorders') === 1) {
return;
}
Expand Down Expand Up @@ -511,6 +554,12 @@ public function postProcess()
$orderRepo = $this->getModule()->diContainer->get(OrderRepository::class);
foreach ($_POST as $key => $value) {
if (preg_match('/^weight_(\d+)$/', $key, $matches)) {
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->errors[] = $this->l('You do not have permission to modify order weights.', 'packeteryordergridcontroller');
continue;
}

$orderId = (int)$matches[1];
if ($value === '') {
$value = null;
Expand Down Expand Up @@ -623,7 +672,10 @@ public function getWeightEditable($weight, array $row)
$smarty = new Smarty();
$smarty->assign('weight', $weight);
$smarty->assign('orderId', $row['id_order']);
$smarty->assign('disabled', $row['tracking_number']);

$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
$isDisabled = !$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_ORDERS, UserPermissionHelper::PERMISSION_EDIT) || (isset($row['tracking_number']) && $row['tracking_number'] !== '');
$smarty->assign('disabled', $isDisabled);

return $smarty->fetch(__DIR__ . '/../../views/templates/admin/grid/weightEditable.tpl');
}
Expand Down
31 changes: 31 additions & 0 deletions packetery/controllers/admin/PacketerySettingController.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,42 @@
<?php

use Packetery\Tools\UserPermissionHelper;

class PacketerySettingController extends ModuleAdminController
{
/** @var Packetery */
private $packetery;

public function __construct()
{
$this->bootstrap = true;
$this->context = Context::getContext();

parent::__construct();
}

public function initContent()
{
$userPermissionHelper = $this->getModule()->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CONFIG, UserPermissionHelper::PERMISSION_VIEW)) {
$this->errors[] = $this->l('You do not have permission to configure the Packeta module. Access denied.', 'packeterysettingcontroller');
return;
}

Tools::redirectAdmin(
$this->module->getAdminLink('AdminModules', ['configure' => $this->module->name, 'tab_module' => $this->module->tab, 'module_name' => $this->module->name])
);
}

/**
* @return Packetery
*/
private function getModule()
{
if ($this->packetery === null) {
$this->packetery = new Packetery();
}

return $this->packetery;
}
}
11 changes: 10 additions & 1 deletion packetery/libs/AbstractFormService.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,31 @@
use Packetery\Module\Options;
use Packetery\Tools\ConfigHelper;
use Packetery\Tools\Tools;
use Packetery\Tools\UserPermissionHelper;

abstract class AbstractFormService
{
/** @var Options */
private $options;

public function __construct(Options $options)
/** @var UserPermissionHelper */
private $userPermissionHelper;

public function __construct(Options $options, UserPermissionHelper $userPermissionHelper)
{
$this->options = $options;
$this->userPermissionHelper = $userPermissionHelper;
}

/**
* @throws FormDataPersistException
*/
public function handleSubmit()
{
if (!$this->userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CONFIG, UserPermissionHelper::PERMISSION_EDIT)) {
throw new FormDataPersistException('You do not have permission to save configuration.');
}

$formFields = $this->getConfigurationFormFields();
foreach ($formFields as $fieldName => $fieldConfig) {
$this->handleConfigOption($fieldName, $fieldConfig);
Expand Down
29 changes: 26 additions & 3 deletions packetery/libs/Carrier/CarrierAdminForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Packetery\ApiCarrier\ApiCarrierRepository;
use Packetery\Exceptions\DatabaseException;
use Packetery\Tools\MessageManager;
use Packetery\Tools\UserPermissionHelper;
use Tools;

class CarrierAdminForm
Expand Down Expand Up @@ -88,8 +89,13 @@ public function buildCarrierForm()
}

if (Tools::isSubmit('submitCarrierForm')) {
$carrierData['id_branch'] = Tools::getValue('id_branch');
$this->saveCarrier($carrierData);
$userPermissionHelper = $this->module->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CARRIERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->error = $this->module->l('You do not have permission to edit carrier settings.', 'carrieradminform');
} else {
$carrierData['id_branch'] = Tools::getValue('id_branch');
$this->saveCarrier($carrierData);
}
}

if ($carrierData['name'] === '0') {
Expand Down Expand Up @@ -158,7 +164,12 @@ public function buildCarrierOptionsForm()
}

if (Tools::isSubmit('submitCarrierOptionsForm')) {
$this->saveCarrierOptions($carrierData, $apiCarrier);
$userPermissionHelper = $this->module->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CARRIERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->error = $this->module->l('You do not have permission to edit carrier options.', 'carrieradminform');
} else {
$this->saveCarrierOptions($carrierData, $apiCarrier);
}
}

$possibleVendors = $this->getPossibleVendors($carrierData);
Expand Down Expand Up @@ -280,6 +291,12 @@ public function buildCarrierOptionsForm()
*/
public function saveCarrier(array $carrierData)
{
$userPermissionHelper = $this->module->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CARRIERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->error = $this->module->l('You do not have permission to save carrier settings.', 'carrieradminform');
return;
}

$apiCarrier = $this->apiRepository->getById($carrierData['id_branch']);
if (!$apiCarrier) {
$this->repository->deleteById($this->carrierId);
Expand Down Expand Up @@ -327,6 +344,12 @@ public function saveCarrier(array $carrierData)
*/
public function saveCarrierOptions(array $carrierData, array $apiCarrier)
{
$userPermissionHelper = $this->module->diContainer->get(UserPermissionHelper::class);
if (!$userPermissionHelper->hasPermission(UserPermissionHelper::SECTION_CARRIERS, UserPermissionHelper::PERMISSION_EDIT)) {
$this->error = $this->module->l('You do not have permission to save carrier options.', 'carrieradminform');
return;
}

$formData = Tools::getAllValues();
$pickupPointType = $this->getPickupPointType($apiCarrier, $carrierData['id_branch']);

Expand Down
Loading