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)