From 5bf400fac68987f421119a7d206b2d190d9929fe Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Tue, 11 Feb 2014 22:45:28 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20HEAD-BUG-FIX=20(4.3/Cloud)=20to=20HEAD?= =?UTF-8?q?=20(4.3/Cloud)=20=20=20=2058164:=20Merged=20V4.2-BUG-FIX=20(4.2?= =?UTF-8?q?.1)=20to=20HEAD-BUG-FIX=20(Cloud/4.3)=20=20=20=20=20=20=2058030?= =?UTF-8?q?:=20Merged=20V4.1-BUG-FIX=20(4.1.8)=20to=20V4.2-BUG-FIX=20(4.2.?= =?UTF-8?q?1)=20=20=20=20=20=20=20=20=20=2056942:=20Merged=20DEV=20to=20V4?= =?UTF-8?q?.1-BUG-FIX=20(4.1.7)=20=20=20=20=20=20=20=20=20=20=20=20=205688?= =?UTF-8?q?3=20:=20MNT-9794:=20Authorities=20with=20duplicate=20names=20ca?= =?UTF-8?q?n=20be=20easilly=20created=20using=20=C2=AB=20AuthorityService?= =?UTF-8?q?=20=C2=BB=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20-=20Cr?= =?UTF-8?q?eation=20of=20the=20duplicated=20authorities=20is=20fixed.=20Un?= =?UTF-8?q?it=20tests=20are=20added.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@61929 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../authority/AuthorityServiceImpl.java | 8 +++++- .../authority/AuthorityServiceTest.java | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java b/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java index 34a3033da1..9f20145637 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java @@ -606,7 +606,13 @@ public class AuthorityServiceImpl implements AuthorityService, InitializingBean { checkTypeIsMutable(type); String name = getName(type, shortName); - authorityDAO.createAuthority(name, authorityDisplayName, authorityZones); + + //MNT-9794 fix. If authority with 'name' doesn't exist it will be created + if (!authorityDAO.authorityExists(name)) + { + authorityDAO.createAuthority(name, authorityDisplayName, authorityZones); + } + return name; } diff --git a/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java b/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java index b23ee87f58..b33fa9172b 100644 --- a/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java +++ b/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java @@ -591,6 +591,34 @@ public class AuthorityServiceTest extends TestCase pubAuthorityService.deleteAuthority(auth1); assertEquals(0, getAllAuthorities(AuthorityType.ROLE).size()); assertEquals(0, pubAuthorityService.getAllRootAuthorities(AuthorityType.ROLE).size()); + + // Testing MNT-9794 fix. Creates authority 'DUPLICATEDGROUP' twice. Only one authority with such name should be created. + String dublicatedAuthorityShortName = "DUPLICATEDGROUP"; + AuthorityType dublicatedAuthorityType = AuthorityType.GROUP; + + //Creates authority twice with duplicated name + pubAuthorityService.createAuthority(dublicatedAuthorityType, dublicatedAuthorityShortName); + pubAuthorityService.createAuthority(dublicatedAuthorityType, dublicatedAuthorityShortName); + + List duplicatedGroupAuthorities = getAuthorityByTypeAndShortName(dublicatedAuthorityType, dublicatedAuthorityShortName); + + //Only one authority should be created with duplicated name + assertEquals(1, duplicatedGroupAuthorities.size()); + + pubAuthorityService.deleteAuthority("GROUP_DUPLICATEDGROUP"); + List duplicatedAuthoritiesAfterDelete = getAuthorityByTypeAndShortName(dublicatedAuthorityType, dublicatedAuthorityShortName); + assertEquals(0, duplicatedAuthoritiesAfterDelete.size()); + } + + /** + * Returns the list of authorities according the authority type and authority short name + * @param type authority type + * @param shortName authority short name + * @return List of String authorities + */ + private List getAuthorityByTypeAndShortName(AuthorityType type, String shortName) + { + return pubAuthorityService.getAuthorities(type, null, shortName, false, true, new PagingRequest(0, Integer.MAX_VALUE, null)).getPage(); } private void checkAuthorityCollectionSize(int expected, List actual, AuthorityType type)