From a0077e4ae03dd1e98c443e8cdb2981dacd9258c0 Mon Sep 17 00:00:00 2001 From: Stefano Ricci Date: Mon, 9 Mar 2026 23:09:49 +0100 Subject: [PATCH 1/2] Data management: apply qualifiers filtering also to data cleansing users --- .../collect/manager/SessionManager.java | 5 +++-- .../collect/web/controller/RecordController.java | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/collect-server/src/main/java/org/openforis/collect/manager/SessionManager.java b/collect-server/src/main/java/org/openforis/collect/manager/SessionManager.java index 2f75915034..4c78e0633b 100644 --- a/collect-server/src/main/java/org/openforis/collect/manager/SessionManager.java +++ b/collect-server/src/main/java/org/openforis/collect/manager/SessionManager.java @@ -46,9 +46,10 @@ public void createSessionState(HttpSession session) { String sessionId = session.getId(); SessionState sessionState = new SessionState(sessionId); if (CollectConfiguration.isDevelopmentMode()) { - sessionState.setUser(userManager.loadAdminUser()); +// sessionState.setUser(userManager.loadAdminUser()); // sessionState.setUser(userManager.loadByUserName("view")); -// sessionState.setUser(userManager.loadByUserName("entry")); +// sessionState.setUser(userManager.loadByUserName("editor")); + sessionState.setUser(userManager.loadByUserName("cleanser")); } session.setAttribute(SessionState.SESSION_ATTRIBUTE_NAME, sessionState); } diff --git a/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java b/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java index e48cb5b6f0..88f86592e1 100644 --- a/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java +++ b/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java @@ -1073,7 +1073,8 @@ private static RecordFilter createRecordFilter(CollectSurvey survey, User user, rootEntityId = survey.getSchema().getFirstRootEntityDefinition().getId(); } - UserInGroup userInGroup = userGroupManager.findUserInGroupOrDescendants(survey.getUserGroupId(), user.getId()); + Integer surveyUserGroupId = survey.getUserGroupId(); + UserInGroup userInGroup = userGroupManager.findUserInGroupOrDescendants(surveyUserGroupId, user.getId()); RecordFilter recordFilter = new RecordFilter(survey); recordFilter.setRootEntityId(rootEntityId); @@ -1083,7 +1084,18 @@ private static RecordFilter createRecordFilter(CollectSurvey survey, User user, recordFilter.setOwnerId(user.getId()); } if (user.getRole() != UserRole.ADMIN) { - Map qualifiers = userGroupManager.getQualifiers(survey.getUserGroupId(), user.getId()); + Integer mostSpecificGroupId = userInGroup.getGroupId(); + Map qualifiers = new HashMap(); + Integer currentGroupId = mostSpecificGroupId; + while (currentGroupId != null) { + UserGroup group = userGroupManager.loadById(currentGroupId); + Map groupQualifiers = group.getQualifiersByName(); + qualifiers.putAll(groupQualifiers); + if (currentGroupId == surveyUserGroupId) { + break; + } + currentGroupId = group.getParentId(); + } if (!qualifiers.isEmpty()) { recordFilter.setQualifiersByName(qualifiers); } From dc85204b0f7679cf70e800bcf8b1e26caabd189e Mon Sep 17 00:00:00 2001 From: Stefano Ricci Date: Mon, 9 Mar 2026 23:18:39 +0100 Subject: [PATCH 2/2] code cleanup --- .../collect/manager/LocalUserGroupManager.java | 16 ++++++++++++++++ .../collect/manager/UserGroupManager.java | 2 ++ .../collect/manager/ClientUserGroupManager.java | 6 ++++++ .../collect/web/controller/RecordController.java | 12 +----------- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/collect-core/src/main/java/org/openforis/collect/manager/LocalUserGroupManager.java b/collect-core/src/main/java/org/openforis/collect/manager/LocalUserGroupManager.java index d9de02fea4..522d6cb063 100644 --- a/collect-core/src/main/java/org/openforis/collect/manager/LocalUserGroupManager.java +++ b/collect-core/src/main/java/org/openforis/collect/manager/LocalUserGroupManager.java @@ -317,6 +317,22 @@ public Map getQualifiers(int userGroupId, int userId) { UserGroup associatedGroup = loadById(userInGroup.getGroupId()); return associatedGroup.getQualifiersByName(); } + + @Override + public Map getAllApplicableQualifiers(int surveyUserGroupId, int mostSpecificUserGroupId) { + Map qualifiers = new HashMap(); + Integer currentGroupId = mostSpecificUserGroupId; + while (currentGroupId != null) { + UserGroup group = loadById(currentGroupId); + Map groupQualifiers = group.getQualifiersByName(); + qualifiers.putAll(groupQualifiers); + if (currentGroupId == surveyUserGroupId) { + break; + } + currentGroupId = group.getParentId(); + } + return qualifiers; + } private List fillLazyLoadedFields(List groups) { for (UserGroup group : groups) { diff --git a/collect-core/src/main/java/org/openforis/collect/manager/UserGroupManager.java b/collect-core/src/main/java/org/openforis/collect/manager/UserGroupManager.java index ef426df6c4..0035e9660f 100644 --- a/collect-core/src/main/java/org/openforis/collect/manager/UserGroupManager.java +++ b/collect-core/src/main/java/org/openforis/collect/manager/UserGroupManager.java @@ -43,6 +43,8 @@ public interface UserGroupManager extends ItemManager { Map getQualifiers(int userGroupId, int userId); + Map getAllApplicableQualifiers(int surveyUserGroupId, int mostSpecificUserGroupId); + void associateResource(int userGroupId, String resourceType, String resourceId); void disassociateResource(int userGroupId, String resourceType, String resourceId); diff --git a/collect-server/src/main/java/org/openforis/collect/manager/ClientUserGroupManager.java b/collect-server/src/main/java/org/openforis/collect/manager/ClientUserGroupManager.java index 235379f67c..917d17e687 100644 --- a/collect-server/src/main/java/org/openforis/collect/manager/ClientUserGroupManager.java +++ b/collect-server/src/main/java/org/openforis/collect/manager/ClientUserGroupManager.java @@ -164,6 +164,12 @@ public Map getQualifiers(int groupId, int userId) { return null; } + @Override + public Map getAllApplicableQualifiers(int surveyUserGroupId, int mostSpecificUserGroupId) { + // TODO Auto-generated method stub + return null; + } + @Override public UserGroup findUserGroupByResource(String resourceType, String resourceId) { @SuppressWarnings("unchecked") diff --git a/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java b/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java index 88f86592e1..20e95abbb9 100644 --- a/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java +++ b/collect-server/src/main/java/org/openforis/collect/web/controller/RecordController.java @@ -1085,17 +1085,7 @@ private static RecordFilter createRecordFilter(CollectSurvey survey, User user, } if (user.getRole() != UserRole.ADMIN) { Integer mostSpecificGroupId = userInGroup.getGroupId(); - Map qualifiers = new HashMap(); - Integer currentGroupId = mostSpecificGroupId; - while (currentGroupId != null) { - UserGroup group = userGroupManager.loadById(currentGroupId); - Map groupQualifiers = group.getQualifiersByName(); - qualifiers.putAll(groupQualifiers); - if (currentGroupId == surveyUserGroupId) { - break; - } - currentGroupId = group.getParentId(); - } + Map qualifiers = userGroupManager.getAllApplicableQualifiers(surveyUserGroupId, mostSpecificGroupId); if (!qualifiers.isEmpty()) { recordFilter.setQualifiersByName(qualifiers); }