Jahia 8.1 Jahia 8.2

How to get the list of all my privileged users?

Question

How to get the list of all my privileged users?

Answer

Here is a Groovy code that can be executed in the JCR console to retrieve this list:

import org.jahia.registries.ServicesRegistry
import org.jahia.services.content.JCRNodeWrapper
import org.jahia.services.content.JCRSessionWrapper
import org.jahia.services.content.JCRTemplate
import org.jahia.services.content.decorator.JCRGroupNode
import org.jahia.services.content.decorator.JCRUserNode
import org.jahia.services.usermanager.JahiaGroupManagerService
import org.jahia.services.usermanager.JahiaUserManagerService
import javax.jcr.PropertyIterator
import javax.jcr.Property
import javax.jcr.Value
 
def collectMembers(JCRGroupNode groupNode, Set<String> members, Set<String> checkedGroups, JCRSessionWrapper session, def log, def startTime) {
    if (checkedGroups.contains(groupNode.getPath())) {
        return members
    }
    def jahiaUserManagerService = ServicesRegistry.getInstance().getJahiaUserManagerService()
    log.info("Check for group: {}", groupNode.getPath())
    checkedGroups.add(groupNode.getPath())
    for (JCRNodeWrapper member : groupNode.getMembers()) {
        if (member instanceof JCRUserNode) {
            def memberPath = member.getPath()
            members.add(memberPath)
            String username = memberPath.substring(memberPath.lastIndexOf('/') + 1)
            JCRUserNode user = jahiaUserManagerService.lookupUser(username)
 
            if (user) {
                log.info("User: {}", username)
            } else {
                log.warn("User node not found for username: {}", username)
            }
            if (members.size() % 10000 == 0) {
                log.info("{}s 10k members found ({}) - reset session cache.", (System.currentTimeMillis() - startTime) / 1000.0, members.size())
                session.refresh(false)
            }
        } else if (member instanceof JCRGroupNode) {
            collectMembers(member, members, checkedGroups, session, log, startTime)
        }
    }
    return members
}
 
long startTime = System.currentTimeMillis()
def jahiaUserManagerService = ServicesRegistry.getInstance().getJahiaUserManagerService()
 
JCRTemplate.getInstance().doExecuteWithSystemSession { session ->
    def groupNode = JahiaGroupManagerService.getInstance().lookupGroupByPath("/groups/privileged", session)
 
    if (!groupNode) {
        log.error("Group '/groups/privileged' not found")
        return
    }
 
    Set<String> members = collectMembers(groupNode, new HashSet<>(), new HashSet<>(), session, log, startTime)
    log.info("Privileged members found ({}):", members.size())
 
    log.info("Total execution time: {}s", (System.currentTimeMillis() - startTime) / 1000.0)
}