diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityBridgeTableAsynchronouslyRefreshedCache.java b/source/java/org/alfresco/repo/security/authority/AuthorityBridgeTableAsynchronouslyRefreshedCache.java index 9862d79575..a19c3b92c1 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityBridgeTableAsynchronouslyRefreshedCache.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityBridgeTableAsynchronouslyRefreshedCache.java @@ -21,6 +21,9 @@ package org.alfresco.repo.security.authority; import java.util.List; import org.alfresco.repo.cache.AbstractAsynchronouslyRefreshedCache; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; +import org.alfresco.repo.tenant.TenantAdminService; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.util.BridgeTable; @@ -35,6 +38,7 @@ public class AuthorityBridgeTableAsynchronouslyRefreshedCache extends AbstractAs { private AuthorityBridgeDAO authorityBridgeDAO; private RetryingTransactionHelper retryingTransactionHelper; + private TenantAdminService tenantAdminService; /** * @param authorityBridgeDAO @@ -54,17 +58,29 @@ public class AuthorityBridgeTableAsynchronouslyRefreshedCache extends AbstractAs this.retryingTransactionHelper = retryingTransactionHelper; } + public void setTenantAdminService(TenantAdminService tenantAdminService) + { + this.tenantAdminService = tenantAdminService; + } + @Override protected BridgeTable buildCache(final String tenantId) { - return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback>() + return AuthenticationUtil.runAs(new RunAsWork>() { - @Override - public BridgeTable execute() throws Throwable + public BridgeTable doWork() throws Exception { - return doBuildCache(tenantId); + return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback>() + { + @Override + public BridgeTable execute() throws Throwable + { + return doBuildCache(tenantId); + } + }, true, false); + } - }, true, false); + }, tenantAdminService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantId)); } private BridgeTable doBuildCache(String tenantId)