提交 e94637c7 编写于 作者: M Miguel Ruiz 提交者: mergify[bot]

AAE-1243 Add version check before starting a process (#3039)

* AAE-1243 Add version check before starting a process

* AAE-1243 Add manifest file to conformance modules

* AAE-1243 Add manifest file to conformance modules
上级 bcdbdcd1
...@@ -54,7 +54,6 @@ import org.activiti.core.common.spring.security.policies.SecurityPolicyAccess; ...@@ -54,7 +54,6 @@ import org.activiti.core.common.spring.security.policies.SecurityPolicyAccess;
import org.activiti.engine.ActivitiObjectNotFoundException; import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService; import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.runtime.api.model.impl.APIDeploymentConverter; import org.activiti.runtime.api.model.impl.APIDeploymentConverter;
import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter; import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter;
...@@ -125,12 +124,21 @@ public class ProcessRuntimeImpl implements ProcessRuntime { ...@@ -125,12 +124,21 @@ public class ProcessRuntimeImpl implements ProcessRuntime {
} else { } else {
processDefinition = repositoryService.getProcessDefinition(processDefinitionId); processDefinition = repositoryService.getProcessDefinition(processDefinitionId);
} }
checkIfDefinitionBelongsToCurrentAppVersion(processDefinition);
if (!securityPoliciesManager.canRead(processDefinition.getKey())) { if (!securityPoliciesManager.canRead(processDefinition.getKey())) {
throw new ActivitiObjectNotFoundException("Unable to find process definition for the given id:'" + processDefinitionId + "'"); throw new ActivitiObjectNotFoundException("Unable to find process definition for the given id:'" + processDefinitionId + "'");
} }
return processDefinitionConverter.from(processDefinition); return processDefinitionConverter.from(processDefinition);
} }
public void checkIfDefinitionBelongsToCurrentAppVersion(org.activiti.engine.repository.ProcessDefinition processDefinition){
if (!selectLatestDeployment().getVersion().equals(processDefinition.getAppVersion())) {
throw new ActivitiForbiddenException("Process definition with the given id:'" + processDefinition.getId() + "' belongs to a different application version.");
}
}
@Override @Override
public Page<ProcessDefinition> processDefinitions(Pageable pageable) { public Page<ProcessDefinition> processDefinitions(Pageable pageable) {
return processDefinitions(pageable, return processDefinitions(pageable,
......
...@@ -16,26 +16,26 @@ ...@@ -16,26 +16,26 @@
package org.activiti.runtime.api.impl; package org.activiti.runtime.api.impl;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.MockitoAnnotations.initMocks;
import org.activiti.api.process.model.ProcessInstance; import org.activiti.api.process.model.ProcessInstance;
import org.activiti.api.process.model.builders.ProcessPayloadBuilder; import org.activiti.api.process.model.builders.ProcessPayloadBuilder;
import org.activiti.api.process.model.payloads.UpdateProcessPayload; import org.activiti.api.process.model.payloads.UpdateProcessPayload;
import org.activiti.api.runtime.model.impl.DeploymentImpl;
import org.activiti.api.runtime.model.impl.ProcessInstanceImpl; import org.activiti.api.runtime.model.impl.ProcessInstanceImpl;
import org.activiti.core.common.spring.security.policies.ActivitiForbiddenException;
import org.activiti.core.common.spring.security.policies.ProcessSecurityPoliciesManager; import org.activiti.core.common.spring.security.policies.ProcessSecurityPoliciesManager;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService; import org.activiti.engine.RuntimeService;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
import org.activiti.engine.runtime.ProcessInstanceQuery; import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter; import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.mockito.Mock; import org.mockito.Mock;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
public class ProcessRuntimeImplTest { public class ProcessRuntimeImplTest {
private ProcessRuntimeImpl processRuntime; private ProcessRuntimeImpl processRuntime;
...@@ -101,4 +101,22 @@ public class ProcessRuntimeImplTest { ...@@ -101,4 +101,22 @@ public class ProcessRuntimeImplTest {
verifyNoMoreInteractions(internalProcess); verifyNoMoreInteractions(internalProcess);
} }
@Test
public void should_ThrowException_when_ProcessDefinitionAppVersionDiffersFromCurrentDeploymentVersion(){
//given
DeploymentImpl deployment = new DeploymentImpl();
deployment.setVersion(2);
doReturn(deployment).when(processRuntime).selectLatestDeployment();
ProcessDefinitionEntityImpl processDefinition = new ProcessDefinitionEntityImpl();
processDefinition.setId("processDefinitionId");
processDefinition.setAppVersion(1);
assertThatThrownBy(() ->processRuntime.checkIfDefinitionBelongsToCurrentAppVersion(processDefinition))
.isInstanceOf(ActivitiForbiddenException.class)
.hasMessage("Process definition with the given id:'processDefinitionId' belongs to a different application version.");
}
} }
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
{
"createdBy": "superadminuser",
"creationDate": "2019-08-16T15:58:46.056+0000",
"lastModifiedBy": "qa-modeler-1",
"lastModifiedDate": "2019-08-16T16:03:41.941+0000",
"id": "c519a458-539f-4385-a937-2edfb4045eb9",
"name": "projectA",
"description": "",
"version": "1"
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册