Skip to main content
nvssr90
Level 2
Jul 24, 2018 1:38 AM UTC
Solved

AEM 6.3 Custom Lock - Lock payload by logged in user

Hi All,

I have created a workflow step to custom lock a page. I am using below step to lock a page but It always locks with service user - I am able to get the current logged in user but unable to impersonate the current logged in user by service user. Is there any way I can lock a payload by currently logged in user?

Approached Tried

1) using workflow session --- It locks by workflow-service-user

2) user impersonation to resource resolver - Unable to impersonate user (error)

3) using dedicated sub-service to get resource resolver -- It locks the payload by dedicated service user

Please let me know is there a way to lock a page by logged in user.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////-- locks by workflow-service-user

@Override

public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap arg2) throws WorkflowException {

workItem.getWorkflow().getInitiator();

    String payload = (String) workItem.getWorkflowData().getPayload();

    ResourceResolver resourceResolver = workflowSession.adaptTo(ResourceResolver.class);

            PageManager pageManager = resourceResolver.adaptTo(PageManager.class); 

            //Page currentPage = pageManager.getPage("/content/page/en/");   

            Page page = pageManager.getPage(payload);

          if (page.isLocked()) {

              //log error

          log.info("If Page Locked");

          } else {

          try {

page.lock();

} catch (WCMException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

             log.info("Else Page Locked");

          }

  

}---

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////----------locks by service-user

resolver = SoniUtils.getResourceResolver(resourceResolverFactory);

        UserManager userManager = resolver.adaptTo(UserManager.class);

        String initiator = item.getWorkflow().getInitiator();

        User currentuser = (User)userManager.getAuthorizable(initiator);

          LOG.info(" currentuser:   "+ currentuser);

        PageManager pageManager = resolver.adaptTo(PageManager.class);

        Page page = pageManager.getPage(payload);

        if (page.isLocked()) {

            //log error

        LOG.info("If Page Locked");

        } else {

        page.lock();

        LOG.info("Else Page Locked");

        }

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
joerghoh
joerghohAccepted solution
Adobe Employee
Nov 20, 2018 5:33 PM UTC

That's one of the rare caes when you need the deprecated getAdministrativeResourceResolver() method.

Jörg

4 replies

Level 3
Nov 20, 2018 4:43 PM UTC

Hi even I am looking for the similar kind of solution. We have the requirement to acquire the lock and unlock of the page by author or initiator of workflow.

Translate
joerghoh
Adobe Employee
joerghohAdobe EmployeeAccepted solution
Adobe Employee
Nov 20, 2018 5:33 PM UTC

That's one of the rare caes when you need the deprecated getAdministrativeResourceResolver() method.

Jörg

Translate
smacdonald2008
Level 10
Nov 20, 2018 8:16 PM UTC

Remember when using that call - you must whitelist the OSGi bundle.

Translate
Level 3
Nov 20, 2018 8:56 PM UTC

smacdonald2008​ Jorg​ It worked for me now, I am able to lock the page using getAdministrativeResourceResolver()method and by whitelisting the bundle.

Thanks a lot!!!

Translate