Skip to content

Commit 51e6723

Browse files
[incubator-kie-issues : 2059] Workflow Engine- User in a task Excluded users can still claim and complete the task (#4016)
* Changes for fixing the excluded user issue * Changes for fixing the issue * Review comments addressed * Review comments addressed Signed-off-by: christinejose <[email protected]> * Review comments addressed Signed-off-by: christinejose <[email protected]> * Updating the IT testcase --------- Signed-off-by: christinejose <[email protected]>
1 parent 50bebc8 commit 51e6723

File tree

2 files changed

+18
-3
lines changed
  • jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle
  • kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests

2 files changed

+18
-3
lines changed

jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/DefaultUserTaskLifeCycle.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,10 @@ private String assignStrategy(UserTaskInstance userTaskInstance, IdentityProvide
222222
}
223223

224224
private void checkPermission(UserTaskInstance userTaskInstance, IdentityProvider identityProvider) {
225-
String user = identityProvider.getName();
226-
Collection<String> roles = identityProvider.getRoles();
225+
this.checkPermission(userTaskInstance, identityProvider.getName(), identityProvider.getRoles());
226+
}
227+
228+
private void checkPermission(UserTaskInstance userTaskInstance, String user, Collection<String> roles) {
227229

228230
if (WORKFLOW_ENGINE_USER.equals(user)) {
229231
return;
@@ -245,11 +247,18 @@ private void checkPermission(UserTaskInstance userTaskInstance, IdentityProvider
245247
return;
246248
}
247249

250+
Set<String> excludedUsers = userTaskInstance.getExcludedUsers();
251+
if (excludedUsers != null && excludedUsers.contains(user)) {
252+
String message = String.format("User '%s' is not authorized to perform an operation on user task '%s'",
253+
user, userTaskInstance.getId());
254+
throw new UserTaskInstanceNotAuthorizedException(message);
255+
}
256+
248257
if (List.of(INACTIVE, ACTIVE).contains(userTaskInstance.getStatus())) {
249258
// there is no user
250259
Set<String> users = new HashSet<>(userTaskInstance.getPotentialUsers());
251260
users.removeAll(userTaskInstance.getExcludedUsers());
252-
if (users.contains(identityProvider.getName())) {
261+
if (users.contains(user)) {
253262
return;
254263
}
255264

kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/UserTaskIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import static java.util.Collections.singletonMap;
6767
import static org.assertj.core.api.Assertions.assertThat;
6868
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
69+
import static org.junit.jupiter.api.Assertions.assertThrows;
6970
import static org.junit.jupiter.api.Assertions.assertTrue;
7071
import static org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle.CLAIM;
7172
import static org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle.COMPLETE;
@@ -514,6 +515,11 @@ public void testApprovalWithExcludedOwnerViaPhases() throws Exception {
514515
userTaskInstances = userTasks.instances().findByIdentity(IdentityProviders.of("admin", singletonList("managers")));
515516
assertThat(userTaskInstances).isNotNull().hasSize(1);
516517
UserTaskInstance ut_2 = userTaskInstances.get(0);
518+
// attempt to claim task with excluded user (manager)
519+
assertThrows(UserTaskInstanceNotAuthorizedException.class, () -> {
520+
ut_2.transition(CLAIM, emptyMap(), IdentityProviders.of("manager", singletonList("managers")));
521+
});
522+
// claim and complete task with different user (admin)
517523
ut_2.transition(CLAIM, emptyMap(), IdentityProviders.of("admin", singletonList("managers")));
518524
ut_2.transition(COMPLETE, emptyMap(), IdentityProviders.of("admin", singletonList("managers")));
519525

0 commit comments

Comments
 (0)