Developer
DevOps
System Administrator
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)
}