diff --git a/services/nginx/app/routes/customerDefaultDepartmentRoute.php b/services/nginx/app/routes/customerDefaultDepartmentRoute.php index aaf13e16..3c6c97a8 100644 --- a/services/nginx/app/routes/customerDefaultDepartmentRoute.php +++ b/services/nginx/app/routes/customerDefaultDepartmentRoute.php @@ -25,13 +25,11 @@ class customerDefaultDepartmentRoute $response->error('Invalid session', 400); } // Require the customer number parameter - self::requireParameters(['customer_number']); - // Check if the customer number is valid - $customer_number = (int)self::getParameter('customer_number'); - self::requireMinLength('customer_number', 1); - self::requireMaxLength('customer_number', 255); - self::requireType($customer_number, self::type_int()); - self::requireMinValue($customer_number, 1); + $customer_number = (int)$this->getCustomerNumberFromParameterOrUser($user); + // Check if the customer is its own customer number + if ($customer_number !== (int)$user->customer_number->value()) { + self::requirePermission('get_customer_default_department_other'); + } // Check if the customer number exists $customer = (new users_o())->getUserByCustomerNumber((int)$customer_number); if (!$customer->exists()) { @@ -53,7 +51,8 @@ class customerDefaultDepartmentRoute $response->success($customer_default_department_o->asArray()); }, [ - 'get_customer_default_department' => 'Get the default department for a customer', + 'get_customer_default_department' => 'Get the default department for a customer (for its both own and other customers, depending on the get_customer_default_department_other permission)', + 'get_customer_default_department_other' => 'Get the default department for other customers', ] ); @@ -67,13 +66,13 @@ class customerDefaultDepartmentRoute $response->error('Invalid session', 400); } // Require the customer number and department parameters - self::requireParameters(['customer_number', 'department']); - // Check if the customer number is valid - $customer_number = (int)self::getParameter('customer_number'); - self::requireMinLength('customer_number', 1); - self::requireMaxLength('customer_number', 255); - self::requireType($customer_number, self::type_int()); - self::requireMinValue($customer_number, 1); + self::requireParameters(['department']); + // Require the customer number parameter + $customer_number = $this->getCustomerNumberFromParameterOrUser($user); + // Check if the customer is its own customer number + if ($customer_number !== (int)$user->customer_number->value()) { + self::requirePermission('add_customer_default_department_other'); + } // Check if the department is valid $department = (int)self::getParameter('department'); self::requireMinLength('department', 1); @@ -108,7 +107,8 @@ class customerDefaultDepartmentRoute $response->success($customer_default_department_o->asArray()); }, [ - 'add_customer_default_department' => 'Add a default department for a customer', + 'add_customer_default_department' => 'Add a default department for a customer (for its both own and other customers, depending on the add_customer_default_department_other permission)', + 'add_customer_default_department_other' => 'Add a default department for other customers', ] ); @@ -122,13 +122,11 @@ class customerDefaultDepartmentRoute $response->error('Invalid session', 400); } // Require the customer number parameter - self::requireParameters(['customer_number']); - // Check if the customer number is valid - $customer_number = (int)self::getParameter('customer_number'); - self::requireMinLength('customer_number', 1); - self::requireMaxLength('customer_number', 255); - self::requireType($customer_number, self::type_int()); - self::requireMinValue($customer_number, 1); + $customer_number = $this->getCustomerNumberFromParameterOrUser($user); + // Check if the customer is its own customer number + if ($customer_number !== (int)$user->customer_number->value()) { + self::requirePermission('delete_customer_default_department_other'); + } // Check if the customer number exists $customer = (new users_o())->getUserByCustomerNumber((int)$customer_number); if (!$customer->exists()) { @@ -151,9 +149,32 @@ class customerDefaultDepartmentRoute $response->success('Default department deleted'); }, [ - 'delete_customer_default_department' => 'Delete a default department for a customer', + 'delete_customer_default_department' => 'Delete a default department for a customer (for its both own and other customers, depending on the delete_customer_default_department_other permission)', + 'delete_customer_default_department_other' => 'Delete a default department for other customers', ] ); } + + /** + * @param users_o|false $user + * @return int + */ + private function getCustomerNumberFromParameterOrUser(users_o|false $user): int + { + if (self::isParametersSet(['customer_number'])) { + self::requireParameters(['customer_number']); + // Check if the customer number is valid + $customer_number = (int)self::getParameter('customer_number'); + self::requireMinLength('customer_number', 1); + self::requireMaxLength('customer_number', 255); + self::requireType($customer_number, self::type_int()); + } else { + // If the customer number is not set, use the user's customer number + $customer_number = (int)$user->customer_number->value(); + // Make sure the customer number is valid + } + self::requireMinValue($customer_number, 1); + return $customer_number; + } } \ No newline at end of file