diff --git a/lib/taskana-core-test/src/test/java/acceptance/task/query/TaskQueryImplAccTest.java b/lib/taskana-core-test/src/test/java/acceptance/task/query/TaskQueryImplAccTest.java index 308fb272f..e47cd83ab 100644 --- a/lib/taskana-core-test/src/test/java/acceptance/task/query/TaskQueryImplAccTest.java +++ b/lib/taskana-core-test/src/test/java/acceptance/task/query/TaskQueryImplAccTest.java @@ -149,6 +149,15 @@ class TaskQueryImplAccTest { taskSummary1, taskSummary2, taskSummary3, taskSummary4, taskSummary5); } + @WithAccessId(user = "admin") + @Test + void should_CountAllTasksFromWorkbasketAsAdmin_When_NoAccessItemForWorkbasketExists() { + long result = + taskService.createTaskQuery().workbasketIdIn(wbWithoutPermissions.getId()).count(); + + assertThat(result).isEqualTo(3); + } + @WithAccessId(user = "user-1-1") @Test void should_OnlyReturnTasksFromCorrectWorkbaskets_When_UserHasNoPermissionToOneWorkbasket() { diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQuerySqlProvider.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQuerySqlProvider.java index 4c8630539..1e34ad939 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQuerySqlProvider.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQuerySqlProvider.java @@ -102,13 +102,32 @@ public class TaskQuerySqlProvider { + "LEFT JOIN USER_INFO AS u ON t.owner = u.USER_ID " + "" + OPENING_WHERE_TAG - + checkForAuthorization() + commonTaskWhereStatement() + CLOSING_WHERE_TAG - + ")" + + "), Y (" + + db2selectFields() + + ", FLAG ) AS (" + "SELECT " + db2selectFields() - + "FROM X " + + ", (" + + " " + + "SELECT 1 " + + "FROM WORKBASKET_ACCESS_LIST s " + + "WHERE " + + "s.ACCESS_ID IN " + + "(#{item}) " + + "and " + + "s.WORKBASKET_ID = X.WORKBASKET_ID AND s.perm_read = 1 fetch first 1 rows only" + + "" + + " " + + "VALUES(1)" + + "" + + " ) " + + "FROM X )" + + "SELECT " + + db2selectFields() + + "FROM Y " + + "WHERE FLAG = 1 " + "" + "ORDER BY ${item}" + " " @@ -168,12 +187,23 @@ public class TaskQuerySqlProvider { + "LEFT JOIN USER_INFO AS u ON t.owner = u.USER_ID " + "" + OPENING_WHERE_TAG - + checkForAuthorization() + commonTaskWhereStatement() + CLOSING_WHERE_TAG - + ")" - + "SELECT COUNT(*) " - + "FROM X with UR" + + "), Y (ID, FLAG) AS (" + + "SELECT ID, (" + + "" + + "SELECT 1 FROM WORKBASKET_ACCESS_LIST s " + + "WHERE s.ACCESS_ID IN " + + "(#{item}) " + + "and " + + "s.WORKBASKET_ID = X.WORKBASKET_ID AND s.perm_read = 1 fetch first 1 rows only " + + " " + + "" + + "VALUES(1)" + + " " + + ") " + + "FROM X ) SELECT COUNT(*) " + + "FROM Y WHERE FLAG = 1 with UR" + CLOSING_SCRIPT_TAG; }