diff --git a/source/java/org/alfresco/repo/site/RoleComparatorImpl.java b/source/java/org/alfresco/repo/site/RoleComparatorImpl.java index 7c13e5f08a..38e4c7a9b3 100644 --- a/source/java/org/alfresco/repo/site/RoleComparatorImpl.java +++ b/source/java/org/alfresco/repo/site/RoleComparatorImpl.java @@ -34,13 +34,21 @@ import java.util.Map; this.setRolePrecedence(rolePrecedence); } - public int compare(String first, String second) - { - int firstRank = getRolePrecedence().get(first); - int secondRank = getRolePrecedence().get(second); - - return secondRank - firstRank; - } + public int compare(String first, String second) + { + int firstRank = 0; + int secondRank = 0; + if (getRolePrecedence().containsKey(first)) + { + firstRank = getRolePrecedence().get(first); + } + if (getRolePrecedence().containsKey(second)) + { + secondRank = getRolePrecedence().get(second); + } + + return secondRank > firstRank ? 1 : secondRank < firstRank ? -1 : 0; + } public void init() { diff --git a/source/java/org/alfresco/repo/site/SiteServiceImpl.java b/source/java/org/alfresco/repo/site/SiteServiceImpl.java index 4817463a85..071c42d25c 100644 --- a/source/java/org/alfresco/repo/site/SiteServiceImpl.java +++ b/source/java/org/alfresco/repo/site/SiteServiceImpl.java @@ -2074,6 +2074,15 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic { members.add(memberInfo); } + else + { + int index = members.indexOf(memberInfo); + int priority = roleComparator.compare(members.get(index).getMemberRole(), memberInfo.getMemberRole()); + if (priority == 1) + { + members.set(index, memberInfo); + } + } // break on max size limit reached if (members.size() >= size) diff --git a/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java b/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java index 3a48e73727..52be7b8b4c 100644 --- a/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java @@ -1638,6 +1638,31 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest fail("Expected exception not thrown."); } + /** + * + * See https://issues.alfresco.com/jira/browse/MNT-2229 + */ + public void testUserRoleInGroups() + { + String sitName = "testMembership2"; + // Create a site as user one + this.siteService.createSite(TEST_SITE_PRESET, sitName, TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PUBLIC); + + /** + * Add a group (GROUP_ONE) with role COLLABORATOR + */ + this.siteService.setMembership(sitName, this.groupOne, SiteModel.SITE_COLLABORATOR); + + /** + * Add a group (GROUP_TWO) with role CONSUMER + */ + this.siteService.setMembership(sitName, this.groupTwo, SiteModel.SITE_CONSUMER); + + List roles = this.siteService.listMembersInfo(sitName, USER_TWO, null, 0, true); + + assertEquals(roles.get(0).getMemberRole(), SiteModel.SITE_COLLABORATOR); + } + /** * Tests the visibility of a site *