diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index a6b122566d3b92868cb1682d48515c8dbdfcbe2c..81a5de0b9346ce838ab2635ec80b9ae0228aa085 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -63,6 +63,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; +import org.olat.core.id.UserConstants; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -2211,22 +2212,30 @@ public class RepositoryManager extends BasicManager { * @param Identity identity */ public boolean isInstitutionalRessourceManagerFor(RepositoryEntry repositoryEntry, Identity identity) { - if(repositoryEntry == null || repositoryEntry.getOwnerGroup() == null) return false; - BaseSecurity secMgr = BaseSecurityManager.getInstance(); - // list of owners - List<Identity> listIdentities = secMgr.getIdentitiesOfSecurityGroup(repositoryEntry.getOwnerGroup()); - String currentUserInstitutionalName = identity.getUser().getProperty("institutionalName", null); - boolean isInstitutionalResourceManager = BaseSecurityManager.getInstance().isIdentityPermittedOnResourceable(identity, Constants.PERMISSION_HASROLE, Constants.ORESOURCE_INSTORESMANAGER); + if(repositoryEntry == null || repositoryEntry.getOwnerGroup() == null) { + return false; + } + + String currentUserInstitutionalName = identity.getUser().getProperty(UserConstants.INSTITUTIONALNAME, null); + if(!StringHelper.containsNonWhitespace(currentUserInstitutionalName)) { + return false; + } + + boolean isInstitutionalResourceManager = securityManager.isIdentityPermittedOnResourceable(identity, Constants.PERMISSION_HASROLE, Constants.ORESOURCE_INSTORESMANAGER); + if(!isInstitutionalResourceManager) { + return false; + } + boolean sameInstitutional = false; - String identInstitutionalName = ""; + List<Identity> listIdentities = securityManager.getIdentitiesOfSecurityGroup(repositoryEntry.getOwnerGroup()); for (Identity ident : listIdentities) { - identInstitutionalName = ident.getUser().getProperty("institutionalName", null); - if ((identInstitutionalName != null) && (identInstitutionalName.equals(currentUserInstitutionalName))) { + String identInstitutionalName = ident.getUser().getProperty(UserConstants.INSTITUTIONALNAME, null); + if (identInstitutionalName != null && identInstitutionalName.equals(currentUserInstitutionalName)) { sameInstitutional = true; break; } } - return isInstitutionalResourceManager && sameInstitutional; + return sameInstitutional; } public int countLearningResourcesAsStudent(Identity identity) { diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java index 369e33d2b2223b485349e771f70b67a69cfb5daf..9d7af3168cc6410b1695324945227e7e848f2c99 100644 --- a/src/test/java/org/olat/repository/RepositoryManagerTest.java +++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java @@ -42,6 +42,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.olat.basesecurity.BaseSecurity; +import org.olat.basesecurity.Constants; import org.olat.basesecurity.SecurityGroup; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DBFactory; @@ -49,6 +50,7 @@ import org.olat.core.commons.services.mark.MarkManager; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; +import org.olat.core.id.UserConstants; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -64,6 +66,7 @@ import org.olat.resource.OLATResourceManager; import org.olat.test.JMSCodePointServerJunitHelper; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; +import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; @@ -79,6 +82,8 @@ public class RepositoryManagerTest extends OlatTestCase { @Autowired private DB dbInstance; @Autowired + private UserManager userManager; + @Autowired private BaseSecurity securityManager; @Autowired private OLATResourceManager resourceManager; @@ -707,6 +712,44 @@ public class RepositoryManagerTest extends OlatTestCase { Assert.assertNotNull(membership2s); Assert.assertTrue(membership2s.isEmpty()); } + + /** + * How can be a resource manager if Constants.ORESOURCE_USERMANAGER is never used? + */ + @Test + public void isInstitutionalRessourceManagerFor() { + Identity owner1 = JunitTestHelper.createAndPersistIdentityAsUser("instit-" + UUID.randomUUID().toString()); + Identity owner2 = JunitTestHelper.createAndPersistIdentityAsUser("instit-" + UUID.randomUUID().toString()); + Identity part3 = JunitTestHelper.createAndPersistIdentityAsUser("instit-" + UUID.randomUUID().toString()); + RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry(); + securityManager.addIdentityToSecurityGroup(owner1, re.getOwnerGroup()); + securityManager.addIdentityToSecurityGroup(owner2, re.getOwnerGroup()); + securityManager.addIdentityToSecurityGroup(part3, re.getParticipantGroup()); + dbInstance.commit(); + + //set the institutions + owner1.getUser().setProperty(UserConstants.INSTITUTIONALNAME, "volks"); + owner2.getUser().setProperty(UserConstants.INSTITUTIONALNAME, "volks"); + part3.getUser().setProperty(UserConstants.INSTITUTIONALNAME, "volks"); + userManager.updateUserFromIdentity(owner1); + userManager.updateUserFromIdentity(owner2); + userManager.updateUserFromIdentity(part3); + dbInstance.commit(); + + //promote owner1 to institution resource manager + SecurityGroup institutionalResourceManagerGroup = securityManager.findSecurityGroupByName(Constants.GROUP_INST_ORES_MANAGER); + securityManager.addIdentityToSecurityGroup(owner1, institutionalResourceManagerGroup); + dbInstance.commitAndCloseSession(); + + //check + boolean institutionMgr1 = repositoryManager.isInstitutionalRessourceManagerFor(re, owner1); + boolean institutionMgr2 = repositoryManager.isInstitutionalRessourceManagerFor(re, owner2); + boolean institutionMgr3 = repositoryManager.isInstitutionalRessourceManagerFor(re, part3); + + Assert.assertTrue(institutionMgr1); + Assert.assertFalse(institutionMgr2); + Assert.assertFalse(institutionMgr3); + } @Test public void testCountByTypeLimitAccess() {