From f1ebfb963f6bdb6c847cbadce271c57c7f9b72c6 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Sat, 31 Jan 2015 15:29:20 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud) 93992: Merged 5.0.N (5.0.1) to HEAD-BUG-FIX (5.1/Cloud) 93945: Merged V4.2-BUG-FIX (4.2.5) to 5.0.N (5.0.1) 93895: MNT-12873: Merged V4.2.3 (4.2.3.16) to V4.2-BUG-FIX(4.2.5) 93552 :Merged DEV to V4.2.3 (4.2.3.16) 93524: MNT-13156: CLONE - Introduction of SiteRole in 4.2.x breaks sites API when there is a custom role defined - Implement site role as String instead of enumeration to allow custom roles. Add CustomRoleTest Unit Test. In SitesImpl convert UnknownAuthorityException into InvalidArgumentException. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@95030 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/site/SiteMembersCannedQuery.java | 7 +- .../alfresco/repo/site/SiteMembership.java | 8 +- .../alfresco/repo/site/SitesCannedQuery.java | 6 +- .../org/alfresco/repo/forum/CommentsTest.java | 8 +- .../alfresco/repo/site/CustomRoleTest.java | 122 ++++++++++++++++++ .../repo/site/site-custom-context.xml | 10 ++ ...itePermissionDefinitionsWithCustomRole.xml | 41 ++++++ 7 files changed, 187 insertions(+), 15 deletions(-) create mode 100755 source/test-java/org/alfresco/repo/site/CustomRoleTest.java create mode 100755 source/test-resources/org/alfresco/repo/site/site-custom-context.xml create mode 100755 source/test-resources/org/alfresco/repo/site/sitePermissionDefinitionsWithCustomRole.xml diff --git a/source/java/org/alfresco/repo/site/SiteMembersCannedQuery.java b/source/java/org/alfresco/repo/site/SiteMembersCannedQuery.java index e1bb974523..9b1c938861 100644 --- a/source/java/org/alfresco/repo/site/SiteMembersCannedQuery.java +++ b/source/java/org/alfresco/repo/site/SiteMembersCannedQuery.java @@ -36,7 +36,6 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteInfo; -import org.alfresco.service.cmr.site.SiteRole; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteService.SiteMembersCallback; import org.alfresco.util.Pair; @@ -113,7 +112,7 @@ public class SiteMembersCannedQuery extends AbstractCannedQuery lastName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_LASTNAME); } - SiteMembership siteMember = new SiteMembership(siteInfo, authority, firstName, lastName, SiteRole.valueOf(permission)); + SiteMembership siteMember = new SiteMembership(siteInfo, authority, firstName, lastName, permission); siteMembers.add(siteMember); } @@ -229,8 +228,8 @@ public class SiteMembersCannedQuery extends AbstractCannedQuery String firstName2 = o2.getFirstName(); String lastName1 = o1.getLastName(); String lastName2 = o2.getLastName(); - SiteRole siteRole1 = o1.getRole(); - SiteRole siteRole2 = o2.getRole(); + String siteRole1 = o1.getRole(); + String siteRole2 = o2.getRole(); int personId = safeCompare(personId1, personId2); int firstName = safeCompare(firstName1, firstName2); diff --git a/source/java/org/alfresco/repo/site/SiteMembership.java b/source/java/org/alfresco/repo/site/SiteMembership.java index cd5bbaab6c..f265a0d2b0 100644 --- a/source/java/org/alfresco/repo/site/SiteMembership.java +++ b/source/java/org/alfresco/repo/site/SiteMembership.java @@ -33,9 +33,9 @@ public class SiteMembership private String personId; private String firstName; private String lastName; - private SiteRole role; + private String role; - public SiteMembership(SiteInfo siteInfo, String personId, String firstName, String lastName, SiteRole role) + public SiteMembership(SiteInfo siteInfo, String personId, String firstName, String lastName, String role) { super(); if(siteInfo == null) @@ -65,7 +65,7 @@ public class SiteMembership this.role = role; } - public SiteMembership(SiteInfo siteInfo, String personId, SiteRole role) + public SiteMembership(SiteInfo siteInfo, String personId, String role) { super(); if(siteInfo == null) @@ -106,7 +106,7 @@ public class SiteMembership return lastName; } - public SiteRole getRole() + public String getRole() { return role; } diff --git a/source/java/org/alfresco/repo/site/SitesCannedQuery.java b/source/java/org/alfresco/repo/site/SitesCannedQuery.java index c9ed7a608b..5ca59fa714 100644 --- a/source/java/org/alfresco/repo/site/SitesCannedQuery.java +++ b/source/java/org/alfresco/repo/site/SitesCannedQuery.java @@ -108,7 +108,7 @@ public class SitesCannedQuery extends AbstractCannedQuery String role = siteService.getMembersRole(siteName, userName); if (role != null) { - siteMembers.add(new SiteMembership(siteInfo, authority, SiteRole.valueOf(role))); + siteMembers.add(new SiteMembership(siteInfo, authority, role)); } } } @@ -219,8 +219,8 @@ public class SitesCannedQuery extends AbstractCannedQuery String firstName2 = o2.getFirstName(); String lastName1 = o1.getLastName(); String lastName2 = o2.getLastName(); - SiteRole siteRole1 = o1.getRole(); - SiteRole siteRole2 = o2.getRole(); + String siteRole1 = o1.getRole(); + String siteRole2 = o2.getRole(); String siteTitle1 = siteInfo1.getTitle(); String siteTitle2 = siteInfo2.getTitle(); diff --git a/source/test-java/org/alfresco/repo/forum/CommentsTest.java b/source/test-java/org/alfresco/repo/forum/CommentsTest.java index aa9e1f3884..90c6e3af5a 100644 --- a/source/test-java/org/alfresco/repo/forum/CommentsTest.java +++ b/source/test-java/org/alfresco/repo/forum/CommentsTest.java @@ -41,6 +41,7 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.permissions.PermissionReference; import org.alfresco.repo.security.permissions.impl.ModelDAO; import org.alfresco.repo.security.permissions.impl.PermissionServiceImpl; +import org.alfresco.repo.site.SiteModel; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentData; @@ -53,7 +54,6 @@ import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteInfo; -import org.alfresco.service.cmr.site.SiteRole; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.NamespaceService; @@ -179,10 +179,10 @@ public class CommentsTest authenticationComponent.setCurrentUser(USER_ONE_NAME); // invite user to a site with 'Collaborator' role - siteService.setMembership(testSite.getShortName(), userTwo, SiteRole.SiteCollaborator.toString()); + siteService.setMembership(testSite.getShortName(), userTwo, SiteModel.SITE_COLLABORATOR); - assertEquals(SiteRole.SiteManager.toString(), siteService.getMembersRole(testSite.getShortName(), USER_ONE_NAME)); - assertEquals(SiteRole.SiteCollaborator.toString(), siteService.getMembersRole(testSite.getShortName(), userTwo)); + assertEquals(SiteModel.SITE_MANAGER, siteService.getMembersRole(testSite.getShortName(), USER_ONE_NAME)); + assertEquals(SiteModel.SITE_COLLABORATOR, siteService.getMembersRole(testSite.getShortName(), userTwo)); // get container of site NodeRef doclib = siteService.getContainer(testSite.getShortName(), SiteService.DOCUMENT_LIBRARY); diff --git a/source/test-java/org/alfresco/repo/site/CustomRoleTest.java b/source/test-java/org/alfresco/repo/site/CustomRoleTest.java new file mode 100755 index 0000000000..eb9d8da01e --- /dev/null +++ b/source/test-java/org/alfresco/repo/site/CustomRoleTest.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2005-2015 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.site; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.alfresco.model.ContentModel; +import org.alfresco.query.PagingRequest; +import org.alfresco.query.PagingResults; +import org.alfresco.repo.security.authentication.AuthenticationComponent; +import org.alfresco.service.cmr.security.PersonService; +import org.alfresco.service.cmr.site.SiteService; +import org.alfresco.service.cmr.site.SiteVisibility; +import org.alfresco.util.ApplicationContextHelper; +import org.alfresco.util.BaseAlfrescoSpringTest; +import org.alfresco.util.Pair; +import org.alfresco.util.PropertyMap; + +/** + * Test custom role for a Site. Based on MNT-12873 + * + * @author Alex Bykov + */ +public class CustomRoleTest extends BaseAlfrescoSpringTest +{ + private static final String USER_ONE = "UserOne_CustomRoleTest"; + private static final String USER_TWO = "UserTwo_CustomRoleTest"; + + private SiteService siteService; + private PersonService personService; + + @SuppressWarnings("deprecation") + protected void onSetUpInTransaction() throws Exception + { + super.onSetUpInTransaction(); + + // Get the required services + this.authenticationComponent = (AuthenticationComponent) this.applicationContext.getBean("authenticationComponent"); + this.siteService = (SiteService) this.applicationContext.getBean("SiteService"); + this.personService = (PersonService) this.applicationContext.getBean("PersonService"); + + // Create the test users + createUser(USER_ONE, "UserOne"); + createUser(USER_TWO, "UserTwo"); + + // Set the current authentication + this.authenticationComponent.setCurrentUser(USER_ONE); + } + + // MNT-12873 + public void testCustomRole() + { + try + { + // Create a site + siteService.createSite("customrolessite", "customrolessite", "Test custom role", "Test custom role", SiteVisibility.PUBLIC); + + this.siteService.setMembership("customrolessite", USER_TWO, "SiteCoordinator"); + + // Get the members of the site + final List> sort = new ArrayList>(); + sort.add(new Pair(SiteService.SortFields.SiteTitle, Boolean.TRUE)); + sort.add(new Pair(SiteService.SortFields.Role, Boolean.TRUE)); + + PagingResults sites = siteService.listSitesPaged(USER_TWO, sort, new PagingRequest(0, 100)); + assertNotNull(sites); + assertEquals(sites.getPage().size(), 1); + } + catch (Exception ex) + { + fail("Custom role breaks sites API. Take a look on MNT-12873\n" + ex.getMessage()); + } + } + + @Override + protected String[] getConfigLocations() + { + String[] existingConfigLocations = ApplicationContextHelper.CONFIG_LOCATIONS; + + List locations = Arrays.asList(existingConfigLocations); + List mutableLocationsList = new ArrayList(locations); + mutableLocationsList.add("classpath:org/alfresco/repo/site/site-custom-context.xml"); + + String[] result = mutableLocationsList.toArray(new String[mutableLocationsList.size()]); + return result; + } + + private void createUser(String userName, String nameSuffix) + { + if (this.authenticationService.authenticationExists(userName) == false) + { + this.authenticationService.createAuthentication(userName, "PWD".toCharArray()); + + PropertyMap ppOne = new PropertyMap(4); + ppOne.put(ContentModel.PROP_USERNAME, userName); + ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName" + nameSuffix); + ppOne.put(ContentModel.PROP_LASTNAME, "lastName" + nameSuffix); + ppOne.put(ContentModel.PROP_EMAIL, "email" + nameSuffix + "@email.com"); + ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle"); + + this.personService.createPerson(ppOne); + } + } +} diff --git a/source/test-resources/org/alfresco/repo/site/site-custom-context.xml b/source/test-resources/org/alfresco/repo/site/site-custom-context.xml new file mode 100755 index 0000000000..4de10452a9 --- /dev/null +++ b/source/test-resources/org/alfresco/repo/site/site-custom-context.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/source/test-resources/org/alfresco/repo/site/sitePermissionDefinitionsWithCustomRole.xml b/source/test-resources/org/alfresco/repo/site/sitePermissionDefinitionsWithCustomRole.xml new file mode 100755 index 0000000000..27b5609c58 --- /dev/null +++ b/source/test-resources/org/alfresco/repo/site/sitePermissionDefinitionsWithCustomRole.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file