diff --git a/dspace-api/src/main/java/org/dspace/authorize/AuthorizeServiceImpl.java b/dspace-api/src/main/java/org/dspace/authorize/AuthorizeServiceImpl.java index eb7d60d84c..debf3c6863 100644 --- a/dspace-api/src/main/java/org/dspace/authorize/AuthorizeServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/authorize/AuthorizeServiceImpl.java @@ -460,7 +460,7 @@ public class AuthorizeServiceImpl implements AuthorizeService { groupService.allMemberGroups(c, e), Constants.ADMIN, Constants.COLLECTION); - if (CollectionUtils.isNotEmpty(policies)) { + if (CollectionUtils.isNotEmpty(policies) || isCommunityAdmin(c, e)) { return true; } } diff --git a/dspace-api/src/test/java/org/dspace/authorize/AuthorizeServiceTest.java b/dspace-api/src/test/java/org/dspace/authorize/AuthorizeServiceTest.java index 110700070f..0ce391ae59 100644 --- a/dspace-api/src/test/java/org/dspace/authorize/AuthorizeServiceTest.java +++ b/dspace-api/src/test/java/org/dspace/authorize/AuthorizeServiceTest.java @@ -13,8 +13,10 @@ import java.sql.SQLException; import org.dspace.AbstractUnitTest; import org.dspace.authorize.factory.AuthorizeServiceFactory; import org.dspace.authorize.service.ResourcePolicyService; +import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.factory.ContentServiceFactory; +import org.dspace.content.service.CollectionService; import org.dspace.content.service.CommunityService; import org.dspace.core.Constants; import org.dspace.eperson.EPerson; @@ -36,6 +38,7 @@ public class AuthorizeServiceTest extends AbstractUnitTest { protected ResourcePolicyService resourcePolicyService = AuthorizeServiceFactory.getInstance() .getResourcePolicyService(); protected CommunityService communityService = ContentServiceFactory.getInstance().getCommunityService(); + protected CollectionService collectionService = ContentServiceFactory.getInstance().getCollectionService(); public AuthorizeServiceTest() { } @@ -125,4 +128,39 @@ public class AuthorizeServiceTest extends AbstractUnitTest { throw new AssertionError(ex); } } + + @Test + public void testIsCollectionAdmin() throws SQLException, AuthorizeException { + + context.turnOffAuthorisationSystem(); + + Community community = communityService.create(null, context); + Collection collection = collectionService.create(context, community); + EPerson eperson = ePersonService.create(context); + + Group administrators = collectionService.createAdministrators(context, collection); + groupService.addMember(context, administrators, eperson); + + context.restoreAuthSystemState(); + context.commit(); + + Assert.assertTrue(authorizeService.isCollectionAdmin(context, eperson)); + } + + @Test + public void testIsCollectionAdminReturnsTrueIfTheUserIsCommunityAdmin() throws SQLException, AuthorizeException { + + context.turnOffAuthorisationSystem(); + + Community community = communityService.create(null, context); + EPerson eperson = ePersonService.create(context); + + Group administrators = communityService.createAdministrators(context, community); + groupService.addMember(context, administrators, eperson); + + context.restoreAuthSystemState(); + context.commit(); + + Assert.assertTrue(authorizeService.isCollectionAdmin(context, eperson)); + } }