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 d9de02fea..522d6cb06 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 ef426df6c..0035e9660 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 235379f67..917d17e68 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/manager/SessionManager.java b/collect-server/src/main/java/org/openforis/collect/manager/SessionManager.java index 2f7591503..4c78e0633 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 e48cb5b6f..20e95abbb 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,8 @@ 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 = userGroupManager.getAllApplicableQualifiers(surveyUserGroupId, mostSpecificGroupId); if (!qualifiers.isEmpty()) { recordFilter.setQualifiersByName(qualifiers); }