mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)
98720: Merged 5.0.N (5.0.2) to HEAD-BUG-FIX (5.1/Cloud) 98568: Merged V4.2-BUG-FIX (4.2.5) to 5.0.N (5.0.2) 98334: Merged DEV (4.2.5) to V4.2-BUG-FIX (4.2.5) 98326: MNT-13198: BM-0012: Run v420b1494_01: (CMIS) GetSites is Slow - Changed the PersonSitesRelation to use a faster API (SiteServiceImpl.listSiteMemberships(String, int)). 98452: MNT-13198: BM-0012: Run v420b1494_01: (CMIS) GetSites is Slow - Corrected the solution to fix the build failures. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@98811 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1011,6 +1011,7 @@
|
|||||||
org.alfresco.service.cmr.site.SiteService.listMembers=ACL_ALLOW
|
org.alfresco.service.cmr.site.SiteService.listMembers=ACL_ALLOW
|
||||||
org.alfresco.service.cmr.site.SiteService.listMembersInfo=ACL_ALLOW
|
org.alfresco.service.cmr.site.SiteService.listMembersInfo=ACL_ALLOW
|
||||||
org.alfresco.service.cmr.site.SiteService.listMembersPaged=ACL_ALLOW
|
org.alfresco.service.cmr.site.SiteService.listMembersPaged=ACL_ALLOW
|
||||||
|
org.alfresco.service.cmr.site.SiteService.listSiteMemberships=ACL_ALLOW
|
||||||
org.alfresco.service.cmr.site.SiteService.listSites=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
|
org.alfresco.service.cmr.site.SiteService.listSites=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
|
||||||
org.alfresco.service.cmr.site.SiteService.listSitesPaged=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
|
org.alfresco.service.cmr.site.SiteService.listSitesPaged=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
|
||||||
org.alfresco.service.cmr.site.SiteService.removeMembership=ACL_ALLOW
|
org.alfresco.service.cmr.site.SiteService.removeMembership=ACL_ALLOW
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2014 Alfresco Software Limited.
|
* Copyright (C) 2005-2015 Alfresco Software Limited.
|
||||||
*
|
*
|
||||||
* This file is part of Alfresco
|
* This file is part of Alfresco
|
||||||
*
|
*
|
||||||
@@ -1180,13 +1180,6 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the {@link SiteInfo siteInfos} for sites to which the specified user has access.
|
|
||||||
* Note that if the user has access to more than 1000 sites, the list will be truncated to 1000 entries.
|
|
||||||
*
|
|
||||||
* @param userName the username
|
|
||||||
* @return a list of {@link SiteInfo site infos}.
|
|
||||||
*/
|
|
||||||
public String resolveSite(String group)
|
public String resolveSite(String group)
|
||||||
{
|
{
|
||||||
// purge non Site related Groups and strip the group name down to the site "shortName" it relates too
|
// purge non Site related Groups and strip the group name down to the site "shortName" it relates too
|
||||||
@@ -1206,48 +1199,20 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the {@link SiteInfo siteInfos} for sites to which the specified user has access.
|
||||||
|
* Note that if the user has access to more than 1000 sites, the list will be truncated to 1000 entries.
|
||||||
|
*
|
||||||
|
* @param userName the username
|
||||||
|
* @return a list of {@link SiteInfo site infos}.
|
||||||
|
*/
|
||||||
private List<SiteInfo> listSitesImpl(final String userName, int size)
|
private List<SiteInfo> listSitesImpl(final String userName, int size)
|
||||||
{
|
{
|
||||||
final int maxResults = size > 0 ? size : 1000;
|
List<SiteMembership> siteMemberships = listSiteMemberships(userName, size);
|
||||||
final Set<String> siteNames = new TreeSet<String>();
|
List<SiteInfo> result = new ArrayList<SiteInfo>(siteMemberships.size());
|
||||||
|
for (SiteMembership membership : siteMemberships)
|
||||||
// MNT-13198 - use the bridge table
|
|
||||||
String actualUserName = personService.getUserIdentifier(userName);
|
|
||||||
if(actualUserName != null)
|
|
||||||
{
|
{
|
||||||
Set<String> containingAuthorities = authorityService.getContainingAuthorities(AuthorityType.GROUP, actualUserName, false);
|
result.add(membership.getSiteInfo());
|
||||||
for(String authority : containingAuthorities)
|
|
||||||
{
|
|
||||||
if (siteNames.size() < maxResults)
|
|
||||||
{
|
|
||||||
String siteName = resolveSite(authority);
|
|
||||||
// MNT-10836 fix, after MNT-10109 we should also check site existence
|
|
||||||
// A simple exists check would be better than getting the site properties etc - profiling suggests x2 faster
|
|
||||||
if ((siteName != null) && hasSite(siteName))
|
|
||||||
{
|
|
||||||
siteNames.add(siteName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (siteNames.isEmpty())
|
|
||||||
{
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
List<ChildAssociationRef> assocs = this.nodeService.getChildrenByName(
|
|
||||||
getSiteRoot(),
|
|
||||||
ContentModel.ASSOC_CONTAINS,
|
|
||||||
siteNames);
|
|
||||||
List<SiteInfo> result = new ArrayList<SiteInfo>(assocs.size());
|
|
||||||
for (ChildAssociationRef assoc : assocs)
|
|
||||||
{
|
|
||||||
// Ignore any node that is not a "site" type
|
|
||||||
NodeRef site = assoc.getChildRef();
|
|
||||||
QName siteClassName = this.directNodeService.getType(site);
|
|
||||||
if (this.dictionaryService.isSubClass(siteClassName, SiteModel.TYPE_SITE))
|
|
||||||
{
|
|
||||||
result.add(createSiteInfo(site));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -3049,6 +3014,82 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String resolveRole(String group)
|
||||||
|
{
|
||||||
|
// purge non Site related Groups and strip the group name down to the role
|
||||||
|
if (group.startsWith(GROUP_SITE_PREFIX))
|
||||||
|
{
|
||||||
|
int roleIndex = group.lastIndexOf('_');
|
||||||
|
if (roleIndex + 1 <= GROUP_SITE_PREFIX_LENGTH)
|
||||||
|
{
|
||||||
|
// There is no role associated
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return group.substring(roleIndex + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SiteMembership> listSiteMemberships (String userName, int size)
|
||||||
|
{
|
||||||
|
final int maxResults = size > 0 ? size : 1000;
|
||||||
|
final Set<String> siteNames = new TreeSet<String>();
|
||||||
|
Map<String, String> roleSitePairs = new HashMap<String, String>();
|
||||||
|
// MNT-13198 - use the bridge table
|
||||||
|
String actualUserName = personService.getUserIdentifier(userName);
|
||||||
|
if(actualUserName != null)
|
||||||
|
{
|
||||||
|
Set<String> containingAuthorities = authorityService.getContainingAuthorities(AuthorityType.GROUP, actualUserName, false);
|
||||||
|
for(String authority : containingAuthorities)
|
||||||
|
{
|
||||||
|
if (siteNames.size() < maxResults)
|
||||||
|
{
|
||||||
|
String siteName = resolveSite(authority);
|
||||||
|
// MNT-10836 fix, after MNT-10109 we should also check site existence
|
||||||
|
// A simple exists check would be better than getting the site properties etc - profiling suggests x2 faster
|
||||||
|
if ((siteName != null) && hasSite(siteName))
|
||||||
|
{
|
||||||
|
String role = resolveRole(authority);
|
||||||
|
if (role != null)
|
||||||
|
{
|
||||||
|
siteNames.add(siteName);
|
||||||
|
roleSitePairs.put(siteName, role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (siteNames.isEmpty())
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<ChildAssociationRef> assocs = this.nodeService.getChildrenByName(
|
||||||
|
getSiteRoot(),
|
||||||
|
ContentModel.ASSOC_CONTAINS,
|
||||||
|
siteNames);
|
||||||
|
List<SiteMembership> result = new ArrayList<SiteMembership>(assocs.size());
|
||||||
|
for (ChildAssociationRef assoc : assocs)
|
||||||
|
{
|
||||||
|
// Ignore any node that is not a "site" type
|
||||||
|
NodeRef site = assoc.getChildRef();
|
||||||
|
QName siteClassName = this.directNodeService.getType(site);
|
||||||
|
if (this.dictionaryService.isSubClass(siteClassName, SiteModel.TYPE_SITE))
|
||||||
|
{
|
||||||
|
SiteInfo siteInfo = createSiteInfo(site);
|
||||||
|
result.add(new SiteMembership(siteInfo, userName, roleSitePairs.get(siteInfo.getShortName())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public PagingResults<SiteMembership> listSitesPaged(final String userName, List<Pair<SiteService.SortFields, Boolean>> sortProps, final PagingRequest pagingRequest)
|
public PagingResults<SiteMembership> listSitesPaged(final String userName, List<Pair<SiteService.SortFields, Boolean>> sortProps, final PagingRequest pagingRequest)
|
||||||
{
|
{
|
||||||
SiteMembershipCannedQueryFactory sitesCannedQueryFactory = (SiteMembershipCannedQueryFactory)cannedQueryRegistry.getNamedObject("sitesCannedQueryFactory");
|
SiteMembershipCannedQueryFactory sitesCannedQueryFactory = (SiteMembershipCannedQueryFactory)cannedQueryRegistry.getNamedObject("sitesCannedQueryFactory");
|
||||||
|
@@ -222,6 +222,16 @@ public interface SiteService
|
|||||||
@NotAuditable
|
@NotAuditable
|
||||||
PagingResults<SiteInfo> listSites(List<FilterProp> filterProps, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest);
|
PagingResults<SiteInfo> listSites(List<FilterProp> filterProps, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all the memberships in sites that the specified user is in.
|
||||||
|
*
|
||||||
|
* @param userName
|
||||||
|
* @param size
|
||||||
|
* @return a list of SiteMembership objects
|
||||||
|
*/
|
||||||
|
@NotAuditable
|
||||||
|
List<SiteMembership> listSiteMemberships (String userName, int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List all the sites that the specified user has a explicit membership to.
|
* List all the sites that the specified user has a explicit membership to.
|
||||||
*
|
*
|
||||||
|
@@ -1135,6 +1135,46 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testListSiteMemberships()
|
||||||
|
{
|
||||||
|
String siteName1 = "testMembership1";
|
||||||
|
String siteName2 = "testMembership2";
|
||||||
|
String siteName3 = "testMembership3";
|
||||||
|
// Create a site as user one
|
||||||
|
this.siteService.createSite(TEST_SITE_PRESET, siteName1, TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PRIVATE);
|
||||||
|
|
||||||
|
// Get the members of the site and check that user one is a manager
|
||||||
|
List<SiteMembership> members = this.siteService.listSiteMemberships(USER_ONE, 0);
|
||||||
|
assertNotNull(members);
|
||||||
|
assertEquals(1, members.size());
|
||||||
|
assertEquals(USER_ONE, members.get(0).getPersonId());
|
||||||
|
assertEquals(SiteModel.SITE_MANAGER, members.get(0).getRole());
|
||||||
|
|
||||||
|
// Create a site as user two and add user one
|
||||||
|
this.authenticationComponent.setCurrentUser(USER_TWO);
|
||||||
|
this.siteService.createSite(TEST_SITE_PRESET, siteName2, TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PRIVATE);
|
||||||
|
this.siteService.setMembership("testMembership2", USER_ONE, SiteModel.SITE_CONSUMER);
|
||||||
|
|
||||||
|
// Create a site as user three and add user one
|
||||||
|
this.authenticationComponent.setCurrentUser(USER_THREE);
|
||||||
|
this.siteService.createSite(TEST_SITE_PRESET, siteName3, TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PRIVATE);
|
||||||
|
this.siteService.setMembership("testMembership3", USER_ONE, SiteModel.SITE_COLLABORATOR);
|
||||||
|
|
||||||
|
this.authenticationComponent.setCurrentUser(USER_ONE);
|
||||||
|
members = this.siteService.listSiteMemberships(USER_ONE, 0);
|
||||||
|
assertNotNull(members);
|
||||||
|
assertEquals(3, members.size());
|
||||||
|
assertEquals(USER_ONE, members.get(0).getPersonId());
|
||||||
|
assertEquals(SiteModel.SITE_MANAGER, members.get(0).getRole());
|
||||||
|
assertEquals(siteName1, members.get(0).getSiteInfo().getShortName());
|
||||||
|
assertEquals(USER_ONE, members.get(1).getPersonId());
|
||||||
|
assertEquals(SiteModel.SITE_CONSUMER, members.get(1).getRole());
|
||||||
|
assertEquals(siteName2, members.get(1).getSiteInfo().getShortName());
|
||||||
|
assertEquals(USER_ONE, members.get(2).getPersonId());
|
||||||
|
assertEquals(SiteModel.SITE_COLLABORATOR, members.get(2).getRole());
|
||||||
|
assertEquals(siteName3, members.get(2).getSiteInfo().getShortName());
|
||||||
|
}
|
||||||
|
|
||||||
public void testJoinLeave()
|
public void testJoinLeave()
|
||||||
{
|
{
|
||||||
// Create a site as user one
|
// Create a site as user one
|
||||||
|
Reference in New Issue
Block a user