1

我正在尝试编写一些将由“管理员”用户运行的代码,这些代码会将文档检出给不同的用户,例如“约翰”。但是,当我在“共享”中查看签出的文档时,它总是说该文档已签出给用户“管理员”。我在 Alfresco 4.0.c 上运行此代码

这是我正在执行的代码

Boolean rtn = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Boolean>() {
   @Override
public Boolean doWork() throws Exception {
  // executes the following code as user who had the document previously checked out
  CheckOutCheckInService checkOutCheckInService = serviceRegistry.getCheckOutCheckInService();

  //this line is debug code to check who the current user is according to the AuthenticationService
  //AuthenticationService authService = serviceRegistry.getAuthenticationService();
  //if (log.isDebugEnabled()) log.debug("Current UserName in AuthenticationService is '" + authService.getCurrentUserName() + "'.");

  NodeRef checkedOutCopy = checkOutCheckInService.checkout(nodeRef);
  ContentWriter writer = fileFolderService.getWriter(checkedOutCopy);
  writer.putContent(workingCopyContentAndMetadata.getContentFile());
  if (log.isDebugEnabled()) log.debug("Have uploaded working copy document as user '" + String.valueOf(workingCopyOwner) + "'.");
  return true; 
  }
}, String.valueOf(workingCopyOwner));

通过查看 Alfresco 源代码,checkOutcheckInService 从 AuthenticationService getCurrentUserName() 方法获取用户名以签出文档。但是,AuthenticationUtil.runAs 代码似乎不会更改 AuthenticationService 中的用户。

我在这里做错了什么或者我该如何正确地做到这一点?

提前致谢。

4

1 回答 1

2

您遇到的问题是注册表接口提供的服务不允许您更改系统中的当前用户。为此,您需要引入 AuthenticationComponent,保留当前用户,更改当前用户,然后恢复原始用户。

这与此处建议的方法相同,这将允许您在 Alfresco 中以系统用户身份运行。

举一个简单的例子:

以与引入注册表相同的方式添加身份验证组件,确保公开一个用于 Spring 注入的设置器:

private AuthenticationComponent authComponent;

//for Spring injection
public void setAuthenticationComponent(AuthenticationComponent authComponent) {
    this.authComponent = authComponent;
}

现在您可以调用该方法来设置当前用户:

    authComponent.setCurrentUser(username);

调用 AuthenticationService.getCurrentUserName() 现在将正确显示当前用户。不要忘记,在重新启动之前,您需要在 *-context.xml 中添加对 bean 的引用。

在你的类的 -context.xml 中:

    property name="authenticationComponent" ref="AuthenticationComponent" 

祝你好运!

于 2012-04-19T18:29:22.853 回答