about: show only sections the account's groups actually permit

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-31 18:24:33 -05:00
parent 4b2f3175ad
commit 2d8e6bb68c

View File

@@ -123,7 +123,7 @@
<section id="s-admins" class="hidden"> <section id="s-admins" class="hidden">
<h2>Administration</h2> <h2>Administration</h2>
<p class="lead">You are in <code>admins</code> or <code>authentik Admins</code>. Sections you are not a member of are shown for reference and say so.</p> <p class="lead">You are in <code>admins</code> or <code>authentik Admins</code>.</p>
<div class="links"> <div class="links">
<a class="card" id="l-auth" href="#"><b>Authentik admin</b><span>users, groups, Discord source, policies</span></a> <a class="card" id="l-auth" href="#"><b>Authentik admin</b><span>users, groups, Discord source, policies</span></a>
<a class="card" id="l-jfadmin" href="#"><b>Jellyfin dashboard</b><span>libraries, plugin, scheduled tasks</span></a> <a class="card" id="l-jfadmin" href="#"><b>Jellyfin dashboard</b><span>libraries, plugin, scheduled tasks</span></a>
@@ -155,17 +155,15 @@ $('dockurl').textContent = location.origin + '/dock/'; $('gitssh').textContent =
$('pills').innerHTML = d.groups.map(g => `<span class="pill">${g}</span>`).join('') || '<span class="pill">no groups yet — ask an admin for a role</span>'; $('pills').innerHTML = d.groups.map(g => `<span class="pill">${g}</span>`).join('') || '<span class="pill">no groups yet — ask an admin for a role</span>';
const has = g => d.groups.includes(g); const has = g => d.groups.includes(g);
const show = (id, on) => $(id).classList.toggle('hidden', !on); const show = (id, on) => $(id).classList.toggle('hidden', !on);
// sections appear only for what this account can actually do (the gates check these same groups)
const isAdmin = has('admins') || has('authentik Admins'); const isAdmin = has('admins') || has('authentik Admins');
show('s-streamers', has('streamers') || isAdmin); show('s-streamers', has('streamers'));
show('s-editors', has('editors') || has('media-admins') || isAdmin); show('s-editors', has('editors') || has('media-admins'));
show('s-mediaadmins', has('media-admins') || isAdmin); show('s-mediaadmins', has('media-admins'));
show('s-git', has('git-users') || has('git-admins') || isAdmin); show('s-git', has('git-users') || has('git-admins'));
show('s-bot', has('bot-users') || isAdmin); show('s-bot', has('bot-users'));
show('s-admins', isAdmin); show('s-admins', isAdmin);
document.querySelectorAll('p.lead[data-group]').forEach(p => { document.querySelectorAll('p.lead[data-group]').forEach(p => { p.innerHTML = p.dataset.yes; });
const member = has(p.dataset.group) || (p.dataset.alt && has(p.dataset.alt));
p.innerHTML = member ? p.dataset.yes : p.dataset.no;
});
} catch (e) { $('who').textContent = 'unknown (' + e.message + ')'; } } catch (e) { $('who').textContent = 'unknown (' + e.message + ')'; }
})(); })();
</script> </script>