diff --git a/source/java/org/alfresco/rest/api/impl/GroupsImpl.java b/source/java/org/alfresco/rest/api/impl/GroupsImpl.java index aab90a5e63..90ad9d8e6a 100644 --- a/source/java/org/alfresco/rest/api/impl/GroupsImpl.java +++ b/source/java/org/alfresco/rest/api/impl/GroupsImpl.java @@ -541,7 +541,14 @@ public class GroupsImpl implements Groups { if (includeParam.contains(PARAM_INCLUDE_PARENT_IDS)) { - Set containingAuthorities = authorityService.getContainingAuthorities(AuthorityType.GROUP, authorityInfo.getAuthorityName(), true); + String authority = authorityInfo.getAuthorityName(); + Set containingAuthorities = Collections.emptySet(); + // Workaround for AuthorityDAO.listAuthorities, where although AuthorityType.GUEST + // is a special case, AuthorityType.EVERYONE is not, and an exception is thrown. + if (!authority.equalsIgnoreCase(PermissionService.ALL_AUTHORITIES)) + { + containingAuthorities = authorityService.getContainingAuthorities(AuthorityType.GROUP, authority, true); + } group.setParentIds(containingAuthorities); } diff --git a/source/test-java/org/alfresco/rest/api/tests/GroupsTest.java b/source/test-java/org/alfresco/rest/api/tests/GroupsTest.java index fa9d8c564b..e28f9b5ee9 100644 --- a/source/test-java/org/alfresco/rest/api/tests/GroupsTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/GroupsTest.java @@ -39,6 +39,7 @@ import org.alfresco.rest.api.tests.client.data.Person; import org.alfresco.rest.framework.resource.parameters.SortColumn; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.util.GUID; import org.junit.After; import org.junit.Before; @@ -884,6 +885,37 @@ public class GroupsTest extends AbstractSingleNetworkSiteTest getGroupsByPersonId(personAlice.getId(), paging, otherParams, HttpServletResponse.SC_BAD_REQUEST); } + // Check include parent ids. + { + Paging paging = getPaging(0, Integer.MAX_VALUE); + Map otherParams = new HashMap<>(); + otherParams.put("include", org.alfresco.rest.api.Groups.PARAM_INCLUDE_PARENT_IDS); + + ListResponse resp = getGroupsByPersonId(personAlice.getId(), paging, otherParams); + + assertEquals(4, resp.getList().size()); + + Iterator it = resp.getList().iterator(); + + Group group = it.next(); + assertEquals(PermissionService.ALL_AUTHORITIES, group.getId()); + assertEquals(0, group.getParentIds().size()); + + group = it.next(); + assertEquals(rootGroup.getId(), group.getId()); + assertEquals(0, group.getParentIds().size()); + + group = it.next(); + assertEquals(groupA.getId(), group.getId()); + assertEquals(1, group.getParentIds().size()); + assertTrue(group.getParentIds().contains(rootGroup.getId())); + + group = it.next(); + assertEquals(groupB.getId(), group.getId()); + assertEquals(1, group.getParentIds().size()); + assertTrue(group.getParentIds().contains(rootGroup.getId())); + } + // Filter by zone, use the -me- alias. { Map params = new HashMap<>();