AnsweredAssumed Answered

How to check out a document to a different user

Question asked by kbrady on Apr 18, 2012
Latest reply on Apr 19, 2012 by kbrady
I'm trying to write some code that will be run by the 'admin' user that will check out a document to a different user e.g. 'John'. However, when I view the checked out document in Share it always says that the document is checked out to the user 'admin'.
I'm running this code on Alfresco 4.0.c

Here is the code that I am executing

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));

From looking at the Alfresco source code, the checkOutcheckInService gets the username to check-out the document to from the AuthenticationService getCurrentUserName() method. However, it appears that the AuthenticationUtil.runAs code does not change the user in the AuthenticationService.

Am I doing something wrong here or how can I do this correctly?

Thanks in advance.

Outcomes