mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged mward/5.2.n-repo-1583-groupmem (5.2.1) to 5.2.N (5.2.1)
134294 mward: REPO-1583: add test and implementation details git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@134399 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -81,6 +81,17 @@ public interface Groups
|
|||||||
*/
|
*/
|
||||||
CollectionWithPagingInfo<Group> getGroups(Parameters parameters);
|
CollectionWithPagingInfo<Group> getGroups(Parameters parameters);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of groups for which the specified person is a member.
|
||||||
|
*
|
||||||
|
* @param personId the person's ID ("-me-" may be used as an alias for the current user.)
|
||||||
|
* @param parameters the {@link Parameters} object to get the parameters passed into the request
|
||||||
|
* including:
|
||||||
|
* - sort & paging params (orderBy, skipCount, maxItems)
|
||||||
|
* @return a paged list of {@code org.alfresco.rest.api.model.Group} objects
|
||||||
|
*/
|
||||||
|
CollectionWithPagingInfo<Group> getGroupsByPersonId(String personId, Parameters parameters);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a list of groups.
|
* Gets a list of groups.
|
||||||
*
|
*
|
||||||
|
@@ -165,8 +165,6 @@ public class GroupsImpl implements Groups
|
|||||||
}
|
}
|
||||||
|
|
||||||
final AuthorityType authorityType = AuthorityType.GROUP;
|
final AuthorityType authorityType = AuthorityType.GROUP;
|
||||||
// TODO: I think this is where we need to do this slightly differently, i.e.
|
|
||||||
// getAllRootAuthoritiesByUserId(). What about root authorities? Are all group authorities root?
|
|
||||||
final Set<String> rootAuthorities = getAllRootAuthorities(authorityType);
|
final Set<String> rootAuthorities = getAllRootAuthorities(authorityType);
|
||||||
|
|
||||||
PagingResults<AuthorityInfo> pagingResult = getAuthoritiesInfo(authorityType, isRootParam, rootAuthorities, sortProp, paging);
|
PagingResults<AuthorityInfo> pagingResult = getAuthoritiesInfo(authorityType, isRootParam, rootAuthorities, sortProp, paging);
|
||||||
@@ -193,6 +191,49 @@ public class GroupsImpl implements Groups
|
|||||||
return CollectionWithPagingInfo.asPaged(paging, groups, pagingResult.hasMoreItems(), totalItems);
|
return CollectionWithPagingInfo.asPaged(paging, groups, pagingResult.hasMoreItems(), totalItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CollectionWithPagingInfo<Group> getGroupsByPersonId(String personId, Parameters parameters)
|
||||||
|
{
|
||||||
|
final List<String> includeParam = parameters.getInclude();
|
||||||
|
Paging paging = parameters.getPaging();
|
||||||
|
|
||||||
|
// Retrieve sort column. This is limited for now to sort column due to
|
||||||
|
// v0 api implementation. Should be improved in the future.
|
||||||
|
Pair<String, Boolean> sortProp = getGroupsSortProp(parameters);
|
||||||
|
|
||||||
|
final AuthorityType authorityType = AuthorityType.GROUP;
|
||||||
|
final Set<String> userAuthorities = authorityService.getAuthoritiesForUser(personId);
|
||||||
|
List<AuthorityInfo> groupList = userAuthorities.stream().map(this::getAuthorityInfo).collect(Collectors.toList());
|
||||||
|
// TODO: if isRoot not null then filter
|
||||||
|
AuthorityInfoComparator authorityComparator = new AuthorityInfoComparator(sortProp.getFirst(), sortProp.getSecond());
|
||||||
|
Collections.sort(groupList, authorityComparator);
|
||||||
|
PagingResults<AuthorityInfo> pagingResult = Util.wrapPagingResults(paging, groupList);
|
||||||
|
|
||||||
|
// Create response.
|
||||||
|
final List<AuthorityInfo> page = pagingResult.getPage();
|
||||||
|
int totalItems = pagingResult.getTotalResultCount().getFirst();
|
||||||
|
|
||||||
|
|
||||||
|
final Set<String> rootAuthorities = getAllRootAuthorities(authorityType);
|
||||||
|
List<Group> groups = new AbstractList<Group>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public Group get(int index)
|
||||||
|
{
|
||||||
|
AuthorityInfo authorityInfo = page.get(index);
|
||||||
|
return getGroup(authorityInfo, includeParam, rootAuthorities);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size()
|
||||||
|
{
|
||||||
|
return page.size();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return CollectionWithPagingInfo.asPaged(paging, groups, pagingResult.hasMoreItems(), totalItems);
|
||||||
|
}
|
||||||
|
|
||||||
private PagingResults<AuthorityInfo> getAuthoritiesInfo(AuthorityType authorityType, Boolean isRootParam, Set<String> rootAuthorities, Pair<String, Boolean> sortProp,
|
private PagingResults<AuthorityInfo> getAuthoritiesInfo(AuthorityType authorityType, Boolean isRootParam, Set<String> rootAuthorities, Pair<String, Boolean> sortProp,
|
||||||
Paging paging)
|
Paging paging)
|
||||||
{
|
{
|
||||||
@@ -299,7 +340,8 @@ public class GroupsImpl implements Groups
|
|||||||
throw new InvalidArgumentException("id is null or empty");
|
throw new InvalidArgumentException("id is null or empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!authorityService.authorityExists(id))
|
// authorityService.authorityExists("GROUP_EVERYONE") returns false!
|
||||||
|
if (!id.equals("GROUP_EVERYONE") && !authorityService.authorityExists(id))
|
||||||
{
|
{
|
||||||
throw new EntityNotFoundException(id);
|
throw new EntityNotFoundException(id);
|
||||||
}
|
}
|
||||||
|
@@ -63,7 +63,6 @@ public class PersonGroupsRelation implements RelationshipResourceAction.Read<Gro
|
|||||||
@Override
|
@Override
|
||||||
public CollectionWithPagingInfo<Group> readAll(String personId, Parameters params)
|
public CollectionWithPagingInfo<Group> readAll(String personId, Parameters params)
|
||||||
{
|
{
|
||||||
// TODO: temp, this just gets all the groups, not by person ID...
|
return groups.getGroupsByPersonId(personId, params);
|
||||||
return groups.getGroups(params);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,12 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.rest.api.tests;
|
package org.alfresco.rest.api.tests;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import java.text.ParseException;
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -45,6 +40,7 @@ import org.alfresco.rest.api.tests.client.PublicApiClient;
|
|||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.Groups;
|
import org.alfresco.rest.api.tests.client.PublicApiClient.Groups;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse;
|
import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.Paging;
|
import org.alfresco.rest.api.tests.client.PublicApiClient.Paging;
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiException;
|
||||||
import org.alfresco.rest.api.tests.client.data.Group;
|
import org.alfresco.rest.api.tests.client.data.Group;
|
||||||
import org.alfresco.rest.api.tests.client.data.GroupMember;
|
import org.alfresco.rest.api.tests.client.data.GroupMember;
|
||||||
import org.alfresco.rest.framework.resource.parameters.SortColumn;
|
import org.alfresco.rest.framework.resource.parameters.SortColumn;
|
||||||
@@ -55,6 +51,8 @@ import org.junit.After;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* V1 REST API tests for managing Groups
|
* V1 REST API tests for managing Groups
|
||||||
*
|
*
|
||||||
@@ -420,6 +418,12 @@ public class GroupsTest extends AbstractSingleNetworkSiteTest
|
|||||||
return groupsProxy.getGroupMembers(groupId, createParams(paging, otherParams), errorMessage, expectedStatus);
|
return groupsProxy.getGroupMembers(groupId, createParams(paging, otherParams), errorMessage, expectedStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ListResponse<Group> getGroupsByPersonId(String userId, final PublicApiClient.Paging paging, Map<String, String> otherParams, String errorMessage, int expectedStatus) throws Exception
|
||||||
|
{
|
||||||
|
final Groups groupsProxy = publicApiClient.groups();
|
||||||
|
return groupsProxy.getGroupsByPersonId(userId, createParams(paging, otherParams), errorMessage, expectedStatus);
|
||||||
|
}
|
||||||
|
|
||||||
private ListResponse<GroupMember> getGroupMembers(String groupId, final PublicApiClient.Paging paging, Map<String, String> otherParams) throws Exception
|
private ListResponse<GroupMember> getGroupMembers(String groupId, final PublicApiClient.Paging paging, Map<String, String> otherParams) throws Exception
|
||||||
{
|
{
|
||||||
return getGroupMembers(groupId, paging, otherParams, "Failed to get group members", HttpServletResponse.SC_OK);
|
return getGroupMembers(groupId, paging, otherParams, "Failed to get group members", HttpServletResponse.SC_OK);
|
||||||
@@ -445,6 +449,29 @@ public class GroupsTest extends AbstractSingleNetworkSiteTest
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetGroupsByUserId() throws Exception
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
createAuthorityContext(user1);
|
||||||
|
setRequestContext(networkAdmin);
|
||||||
|
canGetGroupsForUserId();
|
||||||
|
// TODO: get details for -me- without 403
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
clearAuthorityContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void canGetGroupsForUserId() throws ParseException, PublicApiException
|
||||||
|
{
|
||||||
|
Groups groupsProxy = publicApiClient.groups();
|
||||||
|
ListResponse<Group> groups = groupsProxy.getGroupsByPersonId(user1, null, "Couldn't get user's groups", 200);
|
||||||
|
assertEquals(5L, (long) groups.getPaging().getCount());
|
||||||
|
}
|
||||||
|
|
||||||
private void testGetGroupMembersByGroupId() throws Exception
|
private void testGetGroupMembersByGroupId() throws Exception
|
||||||
{
|
{
|
||||||
Paging paging = getPaging(0, 4);
|
Paging paging = getPaging(0, 4);
|
||||||
|
@@ -2354,5 +2354,23 @@ public class PublicApiClient
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ListResponse<Group> getGroupsByPersonId(String userId, Map<String, String> params, String errorMessage, int expectedStatus)
|
||||||
|
throws PublicApiException, ParseException
|
||||||
|
{
|
||||||
|
HttpResponse response = getAll("people", userId, "groups", null, params, errorMessage, expectedStatus);
|
||||||
|
|
||||||
|
if (response != null && response.getJsonResponse() != null)
|
||||||
|
{
|
||||||
|
JSONObject jsonList = (JSONObject) response.getJsonResponse().get("list");
|
||||||
|
if (jsonList != null)
|
||||||
|
{
|
||||||
|
return Group.parseGroups(response.getJsonResponse());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user