diff --git a/config/alfresco/authentication-services-context.xml b/config/alfresco/authentication-services-context.xml
index 19c1d3e0a4..ed422745ee 100644
--- a/config/alfresco/authentication-services-context.xml
+++ b/config/alfresco/authentication-services-context.xml
@@ -221,6 +221,13 @@
+
+
+
+
+
+ ${spaces.store}
+
diff --git a/source/java/org/alfresco/repo/security/person/PersonDaoImpl.java b/source/java/org/alfresco/repo/security/person/PersonDaoImpl.java
index e40bd4ad62..85d575778f 100644
--- a/source/java/org/alfresco/repo/security/person/PersonDaoImpl.java
+++ b/source/java/org/alfresco/repo/security/person/PersonDaoImpl.java
@@ -39,8 +39,10 @@ import org.alfresco.repo.domain.PropertyMapKey;
import org.alfresco.repo.domain.QNameDAO;
import org.alfresco.repo.domain.hibernate.NodeImpl;
import org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl;
+import org.alfresco.repo.tenant.TenantService;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.namespace.QName;
import org.hibernate.SQLQuery;
@@ -61,22 +63,40 @@ public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao
private LocaleDAO localeDAO;
private DictionaryService dictionaryService;
+
+ private StoreRef storeRef;
+
+ private TenantService tenantService;
+
+ public void setStoreUrl(String storeUrl)
+ {
+ this.storeRef = new StoreRef(storeUrl);
+ }
+
+ public void setTenantService(TenantService tenantService)
+ {
+ this.tenantService = tenantService;
+ }
@SuppressWarnings("unchecked")
public List getPersonOrNull(final String searchUserName, boolean userNamesAreCaseSensitive)
{
+ final StoreRef personStoreRef = tenantService.getName(storeRef);
+
List answer = new ArrayList();
HibernateCallback callback = new HibernateCallback()
{
public Object doInHibernate(Session session)
{
- SQLQuery query = getSession().createSQLQuery("SELECT {n.*} FROM alf_node n JOIN alf_node_properties p ON n.id = p.node_id JOIN alf_child_assoc c on c.child_node_id = n.id WHERE c.qname_localname = :userName1 AND p.qname_id = :qnameId AND p.string_value = :userName2 and n.node_deleted = :False");
+ SQLQuery query = getSession().createSQLQuery("SELECT {n.*} FROM alf_node n JOIN alf_node_properties p ON n.id = p.node_id JOIN alf_child_assoc c on c.child_node_id = n.id JOIN alf_store s on s.id = n.store_id WHERE c.qname_localname = :userName1 AND p.qname_id = :qnameId AND p.string_value = :userName2 and n.node_deleted = :False and s.protocol = :storeProtocol and s.identifier = :storeIdentifier");
query.addEntity("n", NodeImpl.class);
query.setParameter("qnameId", qNameId);
query.setParameter("userName1", searchUserName);
query.setParameter("userName2", searchUserName);
query.setParameter("False", Boolean.FALSE);
+ query.setParameter("storeProtocol", personStoreRef.getProtocol());
+ query.setParameter("storeIdentifier", personStoreRef.getIdentifier());
return query.list();
}
};
@@ -122,16 +142,20 @@ public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao
@SuppressWarnings("unchecked")
public Set getAllPeople()
{
+ final StoreRef personStoreRef = tenantService.getName(storeRef);
+
Set answer = new HashSet();
HibernateCallback callback = new HibernateCallback()
{
public Object doInHibernate(Session session)
{
- SQLQuery query = getSession().createSQLQuery("SELECT {n.*} FROM alf_node n JOIN alf_node_properties p ON n.id = p.node_id WHERE p.qname_id = :qnameId and n.node_deleted = :False");
+ SQLQuery query = getSession().createSQLQuery("SELECT {n.*} FROM alf_node n JOIN alf_node_properties p ON n.id = p.node_id JOIN alf_store s on s.id = n.store_id WHERE p.qname_id = :qnameId and n.node_deleted = :False and s.protocol = :storeProtocol and s.identifier = :storeIdentifier");
query.addEntity("n", NodeImpl.class);
query.setParameter("qnameId", qNameId);
query.setParameter("False", Boolean.FALSE);
+ query.setParameter("storeProtocol", personStoreRef.getProtocol());
+ query.setParameter("storeIdentifier", personStoreRef.getIdentifier());
return query.list();
}
};
diff --git a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java
index d79e25a07c..bb089532b9 100755
--- a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java
+++ b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java
@@ -50,8 +50,6 @@ import org.alfresco.repo.node.db.DbNodeServiceImpl;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
-import org.alfresco.repo.usage.UserUsageBootstrapJob;
-import org.alfresco.repo.usage.UserUsageTrackingComponent;
import org.alfresco.repo.workflow.WorkflowDeployer;
import org.alfresco.service.cmr.admin.RepoAdminService;
import org.alfresco.service.cmr.attributes.AttributeService;
@@ -895,9 +893,11 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo
spacesImporterBootstrap.bootstrap();
+ /* TODO - pending fix for ETHREEOH-283
// calculate any missing usages
UserUsageTrackingComponent userUsageTrackingComponent = (UserUsageTrackingComponent)ctx.getBean(UserUsageBootstrapJob.KEY_COMPONENT);
userUsageTrackingComponent.bootstrapInternal();
+ */
logger.debug("Bootstrapped store: " + tenantService.getBaseName(bootstrapStoreRef));
}
diff --git a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java
index 26a80eac8e..04290a5cdb 100644
--- a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java
+++ b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java
@@ -32,6 +32,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import junit.framework.TestCase;
@@ -104,6 +105,7 @@ public class MultiTDemoTest extends TestCase
public static final String TEST_USER1 = "alice";
public static final String TEST_USER2 = "bob";
public static final String TEST_USER3 = "eve";
+ public static final String TEST_USER4 = "fred";
private static final int DEFAULT_DM_STORE_COUNT = 6;
@@ -146,6 +148,17 @@ public class MultiTDemoTest extends TestCase
{
logger.info("Create tenants");
+ Set personRefs = personService.getAllPeople();
+ //assertEquals(2, personRefs.size()); // super-tenant: admin, guest (note: checking for 2 assumes that this test is run in a fresh bootstrap env)
+ for (NodeRef personRef : personRefs)
+ {
+ String userName = (String)nodeService.getProperty(personRef, ContentModel.PROP_USERNAME);
+ for (final String tenantDomain : tenants)
+ {
+ assertFalse("Unexpected (tenant) user: "+userName, userName.endsWith(tenantDomain));
+ }
+ }
+
try
{
for (final String tenantDomain : tenants)
@@ -181,6 +194,17 @@ public class MultiTDemoTest extends TestCase
{
logger.info("Create demo users");
+ Set personRefs = personService.getAllPeople();
+ //assertEquals(2, personRefs.size()); // super-tenant: admin, guest (note: checking for 2 assumes that this test is run in a fresh bootstrap env)
+ for (NodeRef personRef : personRefs)
+ {
+ String userName = (String)nodeService.getProperty(personRef, ContentModel.PROP_USERNAME);
+ for (final String tenantDomain : tenants)
+ {
+ assertFalse("Unexpected (tenant) user: "+userName, userName.endsWith(tenantDomain));
+ }
+ }
+
try
{
for (final String tenantDomain : tenants)
@@ -188,22 +212,50 @@ public class MultiTDemoTest extends TestCase
String tenantAdminName = tenantService.getDomainUser(TenantService.ADMIN_BASENAME, tenantDomain);
AuthenticationUtil.runAs(new RunAsWork