This is an automated email from the ASF dual-hosted git repository.
mweiler pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 488f55412c [incubator-kie-issues-2088] Workflow Runtime: Secure task
management API (#4126)
488f55412c is described below
commit 488f55412cdde558223c36f0909df26bd8d8e882
Author: Martin Cimbalek <[email protected]>
AuthorDate: Wed Nov 19 15:43:35 2025 +0100
[incubator-kie-issues-2088] Workflow Runtime: Secure task management API
(#4126)
* [kie-isses-2088] Workflow Runtime: Secure Management API
- Add user checks in management API if user is admin or member of admin
group
- Add exception mappings to HTTP codes for spring boot
- Add tests and integration tests
* [incubator-kie-issues-2088] Add options to accept also owner or potential
users or groups
* fixup
* [kie-issues-2088] incporate requested changes
* [kie-issues-2088] incporate requested changes
* [kie-issues-2088] fixup
* [kie-issues-2088] fixup
* [kie-issues-2088] fixup
* [kie-issues-2088] add cleanup after tests to avoid undefined behavior
* [kie-issues-2088] fixup
* [kie-issues-2088] fix formatting
* [kie-issues-2088] fixup
---
.../service/TaskManagementOperations.java | 4 +-
.../management/service/TaskManagementService.java | 60 ++++++++++++++++++----
.../kie/kogito/auth/IdentityProviderFactory.java | 2 +
.../auth/impl/IdentityProviderFactoryImpl.java | 9 ++++
.../task/management/TaskManagementResource.java | 10 ++--
.../kogito/integrationtests/quarkus/TaskIT.java | 12 ++++-
.../exceptions/springboot/ExceptionsHandler.java | 12 +++++
.../springboot/ExceptionsHandlerTest.java | 14 +++++
.../management/TaskManagementRestController.java | 11 ++--
.../integrationtests/springboot/TaskTest.java | 47 +++++++++++++++--
.../jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java | 4 +-
11 files changed, 160 insertions(+), 25 deletions(-)
diff --git
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
index 185cfe4ac0..3e44785f8b 100644
---
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
+++
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
@@ -18,9 +18,11 @@
*/
package org.kie.kogito.task.management.service;
+import org.kie.kogito.auth.IdentityProvider;
+
public interface TaskManagementOperations {
- TaskInfo updateTask(String taskId, TaskInfo taskInfo, boolean replace);
+ TaskInfo updateTask(String taskId, TaskInfo taskInfo, boolean replace,
IdentityProvider identity);
TaskInfo getTask(String taskId);
}
diff --git
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
index f834191c9a..09947f3530 100644
---
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
+++
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
@@ -18,19 +18,16 @@
*/
package org.kie.kogito.task.management.service;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;
+import org.kie.kogito.auth.IdentityProvider;
import org.kie.kogito.process.ProcessConfig;
import org.kie.kogito.services.uow.UnitOfWorkExecutor;
-import org.kie.kogito.usertask.UserTaskConfig;
-import org.kie.kogito.usertask.UserTaskInstance;
-import org.kie.kogito.usertask.UserTaskInstanceNotFoundException;
-import org.kie.kogito.usertask.UserTasks;
+import org.kie.kogito.usertask.*;
import org.kie.kogito.usertask.impl.DefaultUserTaskInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,6 +35,7 @@ import org.slf4j.LoggerFactory;
public class TaskManagementService implements TaskManagementOperations {
private static final Logger LOG =
LoggerFactory.getLogger(TaskManagementService.class);
+ public static final String WORKFLOW_ENGINE_USER = "WORKFLOW_ENGINE_USER";
private UserTasks userTasks;
// unit of work needs to add the publisher and this is not shared.
@@ -51,9 +49,10 @@ public class TaskManagementService implements
TaskManagementOperations {
}
@Override
- public TaskInfo updateTask(String taskId, TaskInfo taskInfo, boolean
shouldReplace) {
- UserTaskInstance userTaskInstance =
UnitOfWorkExecutor.executeInUnitOfWork(processesConfig.unitOfWorkManager(), ()
-> {
+ public TaskInfo updateTask(String taskId, TaskInfo taskInfo, boolean
shouldReplace, IdentityProvider identity) {
+ UserTaskInstance updatedUserTaskInstance =
UnitOfWorkExecutor.executeInUnitOfWork(processesConfig.unitOfWorkManager(), ()
-> {
DefaultUserTaskInstance ut = (DefaultUserTaskInstance)
getUserTaskInstance(taskId);
+ enforceAdminOrOwner(ut, identity);
setField(ut::setTaskDescription, taskInfo::getDescription,
shouldReplace);
setField(ut::setTaskPriority, taskInfo::getPriority,
shouldReplace);
setField(ut::setAdminGroups, taskInfo::getAdminGroups,
shouldReplace);
@@ -64,8 +63,8 @@ public class TaskManagementService implements
TaskManagementOperations {
setMap(ut::setInputs, ut::setInput, taskInfo.getInputParams(),
shouldReplace);
return ut;
});
- LOG.trace("updated task through management endpoint to {}",
userTaskInstance);
- return convert(userTaskInstance);
+ LOG.trace("updated task through management endpoint to {}",
updatedUserTaskInstance);
+ return convert(updatedUserTaskInstance);
}
private <T> boolean setField(Consumer<T> consumer, Supplier<T> supplier,
boolean shouldReplace) {
@@ -120,4 +119,45 @@ public class TaskManagementService implements
TaskManagementOperations {
return userTaskInstance.get();
}
+ private void enforceAdminOrOwner(UserTaskInstance userTaskInstance,
IdentityProvider identity) {
+ String user = identity.getName();
+ Collection<String> roles = identity.getRoles();
+ String taskId = userTaskInstance.getId();
+
+ if (WORKFLOW_ENGINE_USER.equals(user)) {
+ LOG.debug("User {} authorized for user task {} as system user.",
user, taskId);
+ return;
+ }
+
+ if (user == null) {
+ LOG.debug("No user defined to perform update on user task {}",
userTaskInstance.getId());
+ throw new UserTaskInstanceNotAuthorizedException("No user defined
to perform update on user task " + userTaskInstance.getId());
+ }
+
+ Set<String> adminUsers = userTaskInstance.getAdminUsers();
+ if (adminUsers.contains(user)) {
+ LOG.debug("User {} authorized for user task {} as admin user.",
user, taskId);
+ return;
+ }
+
+ Set<String> userAdminGroups = new
HashSet<>(userTaskInstance.getAdminGroups());
+ userAdminGroups.retainAll(roles);
+ if (!userAdminGroups.isEmpty()) {
+ LOG.debug("User {} with roles {} authorized for user task {} as a
member of admin group.", user, roles, taskId);
+ return;
+ }
+
+ if (user.equals(userTaskInstance.getActualOwner())) {
+ LOG.debug("User {} authorized for user task {} as owner.", user,
taskId);
+ return;
+ }
+
+ LOG.debug("identity {} with roles {} not authorized for user task {}
with adminUsers {} and adminGroups {}",
+ identity.getName(),
+ identity.getRoles(),
+ userTaskInstance.getId(),
+ userTaskInstance.getAdminUsers(),
+ userTaskInstance.getAdminGroups());
+ throw new UserTaskInstanceNotAuthorizedException("User " + user + "
with roles " + identity.getRoles() + " not authorized to perform an operation
on user task " + userTaskInstance.getId());
+ }
}
diff --git
a/api/kogito-api/src/main/java/org/kie/kogito/auth/IdentityProviderFactory.java
b/api/kogito-api/src/main/java/org/kie/kogito/auth/IdentityProviderFactory.java
index 0d44e9274a..a6c75a0d34 100644
---
a/api/kogito-api/src/main/java/org/kie/kogito/auth/IdentityProviderFactory.java
+++
b/api/kogito-api/src/main/java/org/kie/kogito/auth/IdentityProviderFactory.java
@@ -37,4 +37,6 @@ public interface IdentityProviderFactory {
String KOGITO_SECURITY_AUTH_IMPERSONATION_ALLOWED_FOR_ROLES =
"kogito.security.auth.impersonation.allowed-for-roles";
IdentityProvider getOrImpersonateIdentity(String user, Collection<String>
roles);
+
+ IdentityProvider getIdentity(String user, Collection<String> roles);
}
diff --git
a/api/kogito-api/src/main/java/org/kie/kogito/auth/impl/IdentityProviderFactoryImpl.java
b/api/kogito-api/src/main/java/org/kie/kogito/auth/impl/IdentityProviderFactoryImpl.java
index 655ed5daa3..ae2e5d3c63 100644
---
a/api/kogito-api/src/main/java/org/kie/kogito/auth/impl/IdentityProviderFactoryImpl.java
+++
b/api/kogito-api/src/main/java/org/kie/kogito/auth/impl/IdentityProviderFactoryImpl.java
@@ -49,4 +49,13 @@ public class IdentityProviderFactoryImpl implements
IdentityProviderFactory {
return identityProvider;
}
+
+ @Override
+ public IdentityProvider getIdentity(String user, Collection<String> roles)
{
+
+ if (!config.isEnabled()) {
+ return IdentityProviders.of(user, roles);
+ }
+ return identityProvider;
+ }
}
diff --git
a/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
b/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
index d87f5ca2fe..380f505b39 100644
---
a/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
+++
b/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
@@ -20,6 +20,7 @@ package org.kie.kogito.task.management;
import java.util.List;
+import org.kie.kogito.auth.IdentityProviderFactory;
import org.kie.kogito.process.ProcessConfig;
import org.kie.kogito.task.management.service.TaskInfo;
import org.kie.kogito.task.management.service.TaskManagementOperations;
@@ -54,6 +55,9 @@ public class TaskManagementResource {
@Inject
private ProcessConfig processConfig;
+ @Inject
+ IdentityProviderFactory identityProviderFactory;
+
@PostConstruct
private void init() {
taskService = new TaskManagementService(userTasks, userTaskConfig,
processConfig);
@@ -68,7 +72,7 @@ public class TaskManagementResource {
@QueryParam("user") final String user,
@QueryParam("group") final List<String> groups,
TaskInfo taskInfo) {
- taskService.updateTask(taskId, taskInfo, true);
+ taskService.updateTask(taskId, taskInfo, true,
identityProviderFactory.getIdentity(user, groups));
return Response.ok().build();
}
@@ -76,12 +80,12 @@ public class TaskManagementResource {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("{taskId}")
- public TaskInfo partialUpdateTask(
+ public Response partialUpdateTask(
@PathParam("taskId") String taskId,
@QueryParam("user") final String user,
@QueryParam("group") final List<String> groups,
TaskInfo taskInfo) {
- return taskService.updateTask(taskId, taskInfo, false);
+ return Response.ok(taskService.updateTask(taskId, taskInfo, false,
identityProviderFactory.getIdentity(user, groups))).build();
}
@GET
diff --git
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
index 0388d2827e..7c2c279ae5 100644
---
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
+++
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
@@ -399,10 +399,20 @@ class TaskIT {
Collections.singleton("managers"),
Collections.singleton("Javierito"), Collections.emptySet(),
Collections.emptySet(), Collections.emptyMap());
+ //at first we try with user that doesn't have rights
given().contentType(ContentType.JSON)
.when()
.queryParam("user", "admin")
- .queryParam("group", "managers")
+ .pathParam("taskId", taskId)
+ .body(upTaskInfo)
+ .put("/management/usertasks/{taskId}")
+ .then()
+ .statusCode(403); //should fail, because there is not an
"admin" user assigned to User Task
+
+ //"manager" should have rights
+ given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "manager")
.pathParam("taskId", taskId)
.body(upTaskInfo)
.put("/management/usertasks/{taskId}")
diff --git
a/springboot/addons/rest-exception-handler/src/main/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandler.java
b/springboot/addons/rest-exception-handler/src/main/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandler.java
index 9872513141..9f77881788 100644
---
a/springboot/addons/rest-exception-handler/src/main/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandler.java
+++
b/springboot/addons/rest-exception-handler/src/main/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandler.java
@@ -34,6 +34,8 @@ import
org.kie.kogito.process.ProcessInstanceNotFoundException;
import org.kie.kogito.process.VariableViolationException;
import org.kie.kogito.resource.exceptions.AbstractExceptionsHandler;
import org.kie.kogito.resource.exceptions.ExceptionBodyMessage;
+import org.kie.kogito.usertask.UserTaskInstanceNotAuthorizedException;
+import org.kie.kogito.usertask.UserTaskInstanceNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@@ -114,6 +116,11 @@ public class ExceptionsHandler extends
AbstractExceptionsHandler<ResponseEntity<
return mapException(exception);
}
+ @ExceptionHandler(UserTaskInstanceNotAuthorizedException.class)
+ public ResponseEntity<Map<String, String>>
toResponse(UserTaskInstanceNotAuthorizedException exception) {
+ return mapException(exception);
+ }
+
@ExceptionHandler(ProcessInstanceDuplicatedException.class)
public ResponseEntity<Map<String, String>>
toResponse(ProcessInstanceDuplicatedException exception) {
return mapException(exception);
@@ -129,6 +136,11 @@ public class ExceptionsHandler extends
AbstractExceptionsHandler<ResponseEntity<
return mapException(exception);
}
+ @ExceptionHandler(UserTaskInstanceNotFoundException.class)
+ public ResponseEntity<Map<String, String>>
toResponse(UserTaskInstanceNotFoundException exception) {
+ return mapException(exception);
+ }
+
@ExceptionHandler(WorkItemNotFoundException.class)
public ResponseEntity<Map<String, String>>
toResponse(WorkItemNotFoundException exception) {
return mapException(exception);
diff --git
a/springboot/addons/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandlerTest.java
b/springboot/addons/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandlerTest.java
index 10c8290620..c21940386d 100644
---
a/springboot/addons/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandlerTest.java
+++
b/springboot/addons/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/springboot/ExceptionsHandlerTest.java
@@ -33,6 +33,8 @@ import
org.kie.kogito.process.ProcessInstanceExecutionException;
import org.kie.kogito.process.ProcessInstanceNotFoundException;
import org.kie.kogito.process.VariableViolationException;
import org.kie.kogito.resource.exceptions.ExceptionBodyMessage;
+import org.kie.kogito.usertask.UserTaskInstanceNotAuthorizedException;
+import org.kie.kogito.usertask.UserTaskInstanceNotFoundException;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpStatus;
@@ -108,12 +110,24 @@ class ExceptionsHandlerTest {
verify(tested).mapException(exception);
}
+ @Test
+ void testUserTaskInstanceNotFoundException(@Mock
UserTaskInstanceNotFoundException exception) {
+ tested.toResponse(exception);
+ verify(tested).mapException(exception);
+ }
+
@Test
void testNotAuthorizedException(@Mock NotAuthorizedException exception) {
tested.toResponse(exception);
verify(tested).mapException(exception);
}
+ @Test
+ void testUserTaskInstanceNotAuthorizedException(@Mock
UserTaskInstanceNotAuthorizedException exception) {
+ tested.toResponse(exception);
+ verify(tested).mapException(exception);
+ }
+
@Test
void testProcessInstanceDuplicatedException(@Mock
ProcessInstanceDuplicatedException exception) {
tested.toResponse(exception);
diff --git
a/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
b/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
index 8fdd0e8f6f..039098f939 100644
---
a/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
+++
b/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
@@ -20,6 +20,7 @@ package org.kie.kogito.task.management;
import java.util.List;
+import org.kie.kogito.auth.IdentityProviderFactory;
import org.kie.kogito.process.ProcessConfig;
import org.kie.kogito.task.management.service.TaskInfo;
import org.kie.kogito.task.management.service.TaskManagementOperations;
@@ -43,6 +44,9 @@ import static
org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@RequestMapping("/management/usertasks/")
public class TaskManagementRestController {
+ @Autowired
+ IdentityProviderFactory identityProviderFactory;
+
TaskManagementOperations taskService;
@Autowired
@@ -56,18 +60,17 @@ public class TaskManagementRestController {
@RequestParam(value = "user", required = false) String user,
@RequestParam(value = "group", required = false) List<String>
groups,
@RequestBody TaskInfo taskInfo) {
- taskService.updateTask(taskId, taskInfo, true);
+ taskService.updateTask(taskId, taskInfo, true,
identityProviderFactory.getIdentity(user, groups));
return ResponseEntity.ok().build();
}
@PatchMapping(value = "{taskId}", produces = APPLICATION_JSON_VALUE)
- public TaskInfo partialUpdateTask(
+ public ResponseEntity<TaskInfo> partialUpdateTask(
@PathVariable("taskId") String taskId,
@RequestParam(value = "user", required = false) String user,
@RequestParam(value = "group", required = false) List<String>
groups,
@RequestBody TaskInfo taskInfo) {
- return taskService.updateTask(taskId, taskInfo, false);
-
+ return ResponseEntity.ok(taskService.updateTask(taskId, taskInfo,
false, identityProviderFactory.getIdentity(user, groups)));
}
@GetMapping(value = "{taskId}", produces = APPLICATION_JSON_VALUE)
diff --git
a/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
b/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
index c11f1f9831..992750312e 100644
---
a/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
+++
b/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
@@ -32,6 +32,7 @@ import java.util.stream.Stream;
import org.acme.travels.Address;
import org.acme.travels.Traveller;
import org.jbpm.util.JsonSchemaUtil;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.kie.kogito.task.management.service.TaskInfo;
@@ -57,6 +58,33 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = KogitoSpringbootApplication.class)
public class TaskTest extends BaseRestTest {
+ @AfterEach
+ public void cleanUp() {
+ String processId = "";
+ do {
+ processId = given()
+ .when()
+ .contentType(ContentType.JSON)
+ .queryParam("user", "admin")
+ .queryParam("group", "managers")
+ .get("/approvals")
+ .then()
+ .statusCode(200)
+ .extract()
+ .path("[0].id");
+ if (processId != null && !processId.isBlank()) {
+ given()
+ .when()
+ .contentType(ContentType.JSON)
+ .queryParam("user", "admin")
+ .queryParam("group", "managers")
+ .pathParam("processId", processId)
+ .delete("/approvals/{processId}")
+ .then();
+ }
+ } while (processId != null && !processId.isBlank());
+ }
+
@Test
void testJsonSchema() {
given()
@@ -278,8 +306,7 @@ public class TaskTest extends BaseRestTest {
.then()
.statusCode(200);
- given().contentType(
- ContentType.JSON)
+ given().contentType(ContentType.JSON)
.when()
.queryParam("user", "admin")
.queryParam("group", "managers")
@@ -390,7 +417,7 @@ public class TaskTest extends BaseRestTest {
String taskId = given()
.contentType(ContentType.JSON)
- .queryParam("user", "admin")
+ .queryParam("user", "manager")
.queryParam("group", "managers")
.when()
.get("/usertasks/instance")
@@ -402,9 +429,21 @@ public class TaskTest extends BaseRestTest {
TaskInfo upTaskInfo = new TaskInfo("firstAproval", "high",
Collections.singleton("admin"),
Collections.singleton("managers"),
Collections.singleton("Javierito"), Collections.emptySet(),
Collections.emptySet(), Collections.emptyMap());
+
+ //at first, we try with user that doesn't have rights
given().contentType(ContentType.JSON)
.when()
- .queryParam("user", "admin")
+ .queryParam("user", "jsnow")
+ .pathParam("taskId", taskId)
+ .body(upTaskInfo)
+ .put("/management/usertasks/{taskId}")
+ .then()
+ .statusCode(403); //should fail, because there is not an
"jsnow" user assigned to User Task
+
+ //"managers" should have rights
+ given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "manager")
.queryParam("group", "managers")
.pathParam("taskId", taskId)
.body(upTaskInfo)
diff --git
a/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
b/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
index 2a4bb8430e..dda4332ef0 100644
---
a/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
+++
b/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
@@ -153,7 +153,7 @@ public class UserTaskLifeCycleIT extends BaseUserTaskIT {
.body(new TransitionInfo("claim"))
.post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
.then()
- .statusCode(500);
+ .statusCode(403);
given()
.contentType(ContentType.JSON)
@@ -241,7 +241,7 @@ public class UserTaskLifeCycleIT extends BaseUserTaskIT {
.queryParam("group", "it")
.get(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
.then()
- .statusCode(500);
+ .statusCode(403);
given()
.contentType(ContentType.JSON)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]