Stand with Ukraine 🇺🇦

Group Diff — Confluence Cloud Macro

confluence-content

This macro dynamically retrieves and compares the group memberships of two users, displaying them in categorized tabs. It identifies common groups, as well as unique groups for each user.

Try for free

User Parameters

User1

Select the first user for comparison

User2

Select the second user for comparison

Template

## Initialize variables for user 1
#set($user1AccountId = $parameters["user1"])
#set($user1Details = $ConfluenceManager.get("/wiki/rest/api/user?accountId=$user1AccountId"))
#set($user1GroupsResponse = $ConfluenceManager.get("/wiki/rest/api/user/memberof?accountId=$user1AccountId"))
#set($user1Groups = [])
#if($user1GroupsResponse && $user1GroupsResponse.results)
#foreach($group in $user1GroupsResponse.results)
#set($discard = $user1Groups.add($group.name))
#end
#end

## Initialize variables for user 2
#set($user2AccountId = $parameters["user2"])
#set($user2Details = $ConfluenceManager.get("/wiki/rest/api/user?accountId=$user2AccountId"))
#set($user2GroupsResponse = $ConfluenceManager.get("/wiki/rest/api/user/memberof?accountId=$user2AccountId"))
#set($user2Groups = [])
#if($user2GroupsResponse && $user2GroupsResponse.results)
#foreach($group in $user2GroupsResponse.results)
#set($discard = $user2Groups.add($group.name))
#end
#end

## Calculate common groups and unique groups
#set($commonGroups = [])
#set($user1UniqueGroups = [])
#set($user2UniqueGroups = [])

## Find common groups
#foreach($group in $user1Groups)
#if($user2Groups.contains($group))
#set($discard = $commonGroups.add($group))
#else
#set($discard = $user1UniqueGroups.add($group))
#end
#end

## Find unique groups for user 2
#foreach($group in $user2Groups)
#if(!$user1Groups.contains($group))
#set($discard = $user2UniqueGroups.add($group))
#end
#end

## Render output in three tabs
<div class="aui-tabs horizontal-tabs" style="margin-left: 15px; width: 80%;">
    <ul class="tabs-menu">
        <li class="menu-item active-tab">
            <a href="#user1-groups-tab">Groups for $user1Details.displayName</a>
        </li>
        <li class="menu-item">
            <a href="#user2-groups-tab">Groups for $user2Details.displayName</a>
        </li>
        <li class="menu-item">
            <a href="#common-groups-tab">
                <span style="font-size: 1.5em; display: inline-flex; align-items: center; vertical-align: top; line-height: 0.7;">∩</span> Common Groups
            </a>
        </li>
    </ul>
    <div class="tabs-pane active-pane" id="user1-groups-tab">
        <ul>
            #foreach($group in $user1UniqueGroups)
            <li>$group</li>
            #end
            #if($user1UniqueGroups.size() == 0)
            <li>No unique groups for $user1Details.displayName.</li>
            #end
        </ul>
    </div>
    <div class="tabs-pane" id="user2-groups-tab">
        <ul>
            #foreach($group in $user2UniqueGroups)
            <li>$group</li>
            #end
            #if($user2UniqueGroups.size() == 0)
            <li>No unique groups for $user2Details.displayName.</li>
            #end
        </ul>
    </div>
    <div class="tabs-pane" id="common-groups-tab">
        <ul>
            #foreach($group in $commonGroups)
            <li>$group</li>
            #end
            #if($commonGroups.size() == 0)
            <li>No common groups between $user1Details.displayName and $user2Details.displayName.</li>
            #end
        </ul>
    </div>
</div>

## Handle cases where there are no groups
#if(!$user1Groups || !$user2Groups)
<p>
    No group memberships found for one or both users.
</p>
#end