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