Add permission checks to user dropdown menu (#7381)

Menu items are now conditionally rendered based on user rights and server features.

TheDevRyan committed Oct 25, 2025 at 11:59 UTC d31a7e54dc7ca087850d1594a2e320b60ad660f2
1 file changed +13 -6
views/default3.handlebars
+13 -6
@@ -2127,6 +2127,13 @@
2127 userImageSrc = 'userimage.ashx?rnd=' + userinfo.accountImageRnd;
2128 }
2129
2130 + // Check permissions
2131 + var siteRights = userinfo ? userinfo.siteadmin : 0;
2132 + var serverFeatures = parseInt('{{{serverfeatures}}}');
2133 + var canViewUsers = ((users != null) && ((features & 4) == 0)) || (((userinfo && userinfo.siteadmin & 512) != 0) && ((features & 0x08000000) != 0));
2134 + var canViewFiles = (siteRights & 8) != 0;
2135 + var canViewServer = (siteRights & 21) && ((serverFeatures & 64) != 0);
2136 +
2137 logoutControl = '<div id="userDropdown">' +
2138 '<div id="userDropdownButton">' +
2139 '<img id="userDropdownImage" src="' + userImageSrc + '" />' +
@@ -2146,20 +2153,20 @@
2153 '<span>' + "My Events" + '</span>' +
2154 '</div>' +
2155
2149 - '<div class="userDropdownMenuItem userDropdownMobileOnly" onclick="goForward(\'users\'); QV(\'userDropdownMenu\', false); QV(\'uiSubmenu\', false); resetChevronArrow(); document.removeEventListener(\'click\', closeUISubmenu);">' +
2156 + (canViewUsers ? '<div class="userDropdownMenuItem userDropdownMobileOnly" onclick="goForward(\'users\'); QV(\'userDropdownMenu\', false); QV(\'uiSubmenu\', false); resetChevronArrow(); document.removeEventListener(\'click\', closeUISubmenu);">' +
2157 '<i class="fa fa-users userDropdownMenuIcon"></i>' +
2158 '<span>' + "My Users" + '</span>' +
2152 - '</div>' +
2159 + '</div>' : '') +
2160
2154 - '<div class="userDropdownMenuItem userDropdownMobileOnly" onclick="goForward(\'files\'); QV(\'userDropdownMenu\', false); QV(\'uiSubmenu\', false); resetChevronArrow(); document.removeEventListener(\'click\', closeUISubmenu);">' +
2161 + (canViewFiles ? '<div class="userDropdownMenuItem userDropdownMobileOnly" onclick="goForward(\'files\'); QV(\'userDropdownMenu\', false); QV(\'uiSubmenu\', false); resetChevronArrow(); document.removeEventListener(\'click\', closeUISubmenu);">' +
2162 '<i class="fa fa-folder userDropdownMenuIcon"></i>' +
2163 '<span>' + "My Files" + '</span>' +
2157 - '</div>' +
2164 + '</div>' : '') +
2165
2159 - '<div class="userDropdownMenuItem userDropdownMobileOnly" onclick="goForward(\'server\'); QV(\'userDropdownMenu\', false); QV(\'uiSubmenu\', false); resetChevronArrow(); document.removeEventListener(\'click\', closeUISubmenu);">' +
2166 + (canViewServer ? '<div class="userDropdownMenuItem userDropdownMobileOnly" onclick="goForward(\'server\'); QV(\'userDropdownMenu\', false); QV(\'uiSubmenu\', false); resetChevronArrow(); document.removeEventListener(\'click\', closeUISubmenu);">' +
2167 '<i class="fa fa-server userDropdownMenuIcon"></i>' +
2168 '<span>' + "My Server" + '</span>' +
2162 - '</div>' +
2169 + '</div>' : '') +
2170
2171 '<div id="userDropdownMenuDivider" class="userDropdownMobileOnly"></div>' +
2172