diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php old mode 100755 new mode 100644 index b2cd37b8459b52873588a309522f0f60cb5d77c5..9041dd510877ded3fe3de2d047eb4c0212dba2f1 --- a/src/app/document/controllers/DocumentController.php +++ b/src/app/document/controllers/DocumentController.php @@ -817,6 +817,18 @@ class DocumentController } $workflow = WorkflowModel::getCurrentStep(['select' => ['id', 'mode', 'user_id', 'signature_mode', 'digital_signature_id'], 'documentId' => $args['id']]); + + if (empty($workflow)) { + return $response->withStatus(400)->withJson(['errors' => 'Workflow is over']); + } + + $substitute = UserModel::getById(['id' => $workflow['user_id'], 'select' => ['substitute']]); + + if ($GLOBALS['id'] != $workflow['user_id'] && $GLOBALS['id'] != $substitute['substitute']) { + return $response->withStatus(403)->withJson(['errors' => 'Current user unauthorized for this step']); + } + + $libDir = CoreConfigModel::getLibrariesDirectory(); $loadedXml = CoreConfigModel::getConfig(); $tmpPath = CoreConfigModel::getTmpPath(); @@ -1356,7 +1368,7 @@ class DocumentController $document = DocumentModel::getById(['select' => ['typist'], 'id' => $args['id']]); if (!empty($document['typist']) && $document['typist'] == $GLOBALS['id']) { - return true; + return true; } if (!$args['readOnly']) { @@ -1368,8 +1380,8 @@ class DocumentController if ($currentStep['user_id'] == $args['userId']) { return true; } else { - $user = UserModel::getById(['id' => $args['userId'], 'select' => ['substitute']]); - return $currentStep['user_id'] == $user['substitute']; + $user = UserModel::getById(['id' => $currentStep['user_id'], 'select' => ['substitute']]); + return $user['substitute'] ?? null == $args['userId']; } }