The permissions needed are actually defined in the canDelegatemethod in ch.ivy.addon.portalkit.bean.TaskActionBean:
public boolean canDelegate(ITask task) {
if (task == null) {
return false;
}
EnumSet<TaskState> taskStates = EnumSet.of(TaskState.RESUMED, TaskState.DONE, TaskState.FAILED, TaskState.DESTROYED,
TaskState.CREATED, TaskState.READY_FOR_JOIN, TaskState.FAILED, TaskState.JOIN_FAILED, TaskState.WAITING_FOR_INTERMEDIATE_EVENT);
if (taskStates.contains(task.getState())) {
return false;
}
if (userCanOnlyDelegateAssignedTask(task)) {
return canResume(task);
} else {
if(isNotDoneForWorkingUser(task)) {
return hasPermission(task, IPermission.TASK_WRITE_ACTIVATOR);
} else {
return false;
}
}
}
You'll need:
TASK_WRITE_ACTIVATOR_OWN_TASKS, TASK_WRITE_ACTIVATOR, TASK_DISPLAY_DELEGATE_ACTIONand sadly due to isNotDoneForWorkingUser one would also need the TaskReadAll permission for tasks you are not defined as working user.
If you feel confident to make patches for the portal yourself, you can simplify this by changing the method to:
public boolean canDelegate(ITask task) {
if (task == null) {
return false;
}
EnumSet < TaskState > taskStates = EnumSet.of(TaskState.RESUMED, TaskState.DONE, TaskState.FAILED, TaskState.DESTROYED,
TaskState.CREATED, TaskState.READY_FOR_JOIN, TaskState.FAILED, TaskState.JOIN_FAILED, TaskState.WAITING_FOR_INTERMEDIATE_EVENT);
if (taskStates.contains(task.getState())) {
return false;
}
return isShowDelegateTask;
}
For this you would need to unpack the IAR of the portal, modify the method in the Java file, pack it as IAR and deploy it.
Hope that helps!