diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index d9fb30d910..f0a67b5db6 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -44,7 +44,7 @@ - + @@ -578,6 +578,7 @@ org.alfresco.service.cmr.security.AuthorityService.getContainingAuthorities=ACL_ALLOW org.alfresco.service.cmr.security.AuthorityService.getShortName=ACL_ALLOW org.alfresco.service.cmr.security.AuthorityService.getName=ACL_ALLOW + org.alfresco.service.cmr.security.AuthorityService.authorityExists=ACL_METHOD.ROLE_ADMINISTRATOR diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityDAO.java b/source/java/org/alfresco/repo/security/authority/AuthorityDAO.java index 1e2c5365b9..ff72501824 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityDAO.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityDAO.java @@ -88,4 +88,12 @@ public interface AuthorityDAO * @return */ Set getAllAuthorities(AuthorityType type); + + /** + * Test if an authority already exists. + * + * @param name + * @return + */ + boolean authorityExists(String name); } diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java b/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java index 190cf744ef..ed3c483556 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java @@ -89,6 +89,13 @@ public class AuthorityDAOImpl implements AuthorityDAO this.userToAuthorityCache = userToAuthorityCache; } + public boolean authorityExists(String name) + { + NodeRef ref = getAuthorityOrNull(name); + return ref != null; + } + + public void addAuthority(String parentName, String childName) { NodeRef parentRef = getAuthorityOrNull(parentName); diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java b/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java index bdac935c5d..ca8a0d1cd1 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityServiceImpl.java @@ -241,4 +241,9 @@ public class AuthorityServiceImpl implements AuthorityService authorityDAO.removeAuthority(parentName, childName); } + public boolean authorityExists(String name) + { + return authorityDAO.authorityExists(name); + } + } diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java b/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java index c07bb6f060..4bf6925881 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java @@ -237,9 +237,11 @@ public class AuthorityServiceTest extends TestCase String auth4; String auth5; + assertFalse(pubAuthorityService.authorityExists(pubAuthorityService.getName(AuthorityType.GROUP, "one"))); assertEquals(0, pubAuthorityService.getAllAuthorities(AuthorityType.GROUP).size()); assertEquals(0, pubAuthorityService.getAllRootAuthorities(AuthorityType.GROUP).size()); auth1 = pubAuthorityService.createAuthority(AuthorityType.GROUP, null, "one"); + assertTrue(pubAuthorityService.authorityExists(auth1)); assertEquals(1, pubAuthorityService.getAllAuthorities(AuthorityType.GROUP).size()); assertEquals(1, pubAuthorityService.getAllRootAuthorities(AuthorityType.GROUP).size()); auth2 = pubAuthorityService.createAuthority(AuthorityType.GROUP, null, "two"); diff --git a/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceImpl.java b/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceImpl.java index 5c7047d96d..28974f8d7a 100644 --- a/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceImpl.java +++ b/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceImpl.java @@ -207,4 +207,9 @@ public class SimpleAuthorityServiceImpl implements AuthorityService } + public boolean authorityExists(String name) + { + return false; + } + } diff --git a/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java b/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java index f6b5c8a57e..bb233ae9a8 100644 --- a/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java +++ b/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java @@ -21,6 +21,7 @@ import javax.transaction.UserTransaction; import junit.framework.TestCase; import org.alfresco.repo.security.authentication.AuthenticationComponent; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.MutableAuthenticationDao; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.security.AuthenticationService; @@ -91,7 +92,7 @@ public class SimpleAuthorityServiceTest extends TestCase @Override protected void tearDown() throws Exception { - authenticationService.clearCurrentSecurityContext(); + AuthenticationUtil.clearCurrentSecurityContext(); tx.rollback(); super.tearDown(); } @@ -106,6 +107,8 @@ public class SimpleAuthorityServiceTest extends TestCase public void testAdminUser() { + assertFalse(authorityService.authorityExists("woof")); + authenticationComponent.setCurrentUser("admin"); assertTrue(authorityService.hasAdminAuthority()); assertTrue(pubAuthorityService.hasAdminAuthority()); @@ -119,6 +122,7 @@ public class SimpleAuthorityServiceTest extends TestCase public void testAuthorities() { + assertFalse(pubAuthorityService.authorityExists("woof")); assertEquals(1, pubAuthorityService.getAllAuthorities(AuthorityType.ADMIN).size()); assertTrue(pubAuthorityService.getAllAuthorities(AuthorityType.ADMIN).contains( PermissionService.ADMINISTRATOR_AUTHORITY)); diff --git a/source/java/org/alfresco/service/cmr/security/AuthorityService.java b/source/java/org/alfresco/service/cmr/security/AuthorityService.java index c23348d855..14b6d28572 100644 --- a/source/java/org/alfresco/service/cmr/security/AuthorityService.java +++ b/source/java/org/alfresco/service/cmr/security/AuthorityService.java @@ -171,5 +171,13 @@ public interface AuthorityService * @return */ public String getName(AuthorityType type, String shortName); + + /** + * Check if an authority exists. + * + * @param name (the long name). + * @return + */ + public boolean authorityExists(String name); }