diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java index 821316927..b3aed62fa 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java @@ -1244,10 +1244,11 @@ public class TaskServiceImpl implements TaskService { throw new InvalidStateException( String.format("Task with Id %s has to be claimed before.", task.getId())); } else if (!taskanaEngine - .getEngine() - .getCurrentUserContext() - .getAccessIds() - .contains(task.getOwner())) { + .getEngine() + .getCurrentUserContext() + .getAccessIds() + .contains(task.getOwner()) + && !taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN)) { throw new InvalidOwnerException( String.format( "Owner of task %s is %s, but current user is %s ", diff --git a/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java index b0903d7b6..780a9a0e3 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java @@ -45,6 +45,18 @@ class CompleteTaskAccTest extends AbstractAccTest { assertThat(completedTask.getModified()).isNotEqualTo(completedTask.getCreated()); } + @WithAccessId(user = "admin") + @Test + void should_completeClaimedTaskByAnotherUser_When_UserIsAdmin() throws Exception { + assertThat(TASK_SERVICE.getTask("TKI:000000000000000000000000000000000029").getState()) + .isEqualTo(TaskState.CLAIMED); + Task completedTask = TASK_SERVICE.completeTask("TKI:000000000000000000000000000000000029"); + assertThat(completedTask).isNotNull(); + assertThat(completedTask.getCompleted()).isNotNull(); + assertThat(completedTask.getState()).isEqualTo(TaskState.COMPLETED); + assertThat(completedTask.getModified()).isNotEqualTo(completedTask.getCreated()); + } + @WithAccessId(user = "admin") @WithAccessId(user = "taskadmin") @TestTemplate