fix: only render admin panel link for admins
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 12s
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 12s
This commit is contained in:
34
app.js
34
app.js
@@ -33,10 +33,10 @@ const favoritesSections = document.querySelector('#favoritesSections');
|
||||
const loginButton = document.querySelector('#dashboardLoginButton');
|
||||
const logoutButton = document.querySelector('#dashboardLogoutButton');
|
||||
const favoritesLink = document.querySelector('#favoritesLink');
|
||||
const adminPanelLink = document.querySelector('#adminPanelLink');
|
||||
const userBadge = document.querySelector('#dashboardUserBadge');
|
||||
const dashboardMenuButton = document.querySelector('#dashboardMenuButton');
|
||||
const dashboardMenuPanel = document.querySelector('#dashboardMenuPanel');
|
||||
let adminPanelLink = null;
|
||||
|
||||
function normalize(value) {
|
||||
return String(value || '').toLowerCase().trim();
|
||||
@@ -510,16 +510,40 @@ function toggleDashboardMenu() {
|
||||
dashboardMenuPanel.hidden = isOpen;
|
||||
}
|
||||
|
||||
function hasAdminAccess(claims) {
|
||||
const username = String(claims?.preferred_username || '').toLowerCase();
|
||||
const email = String(claims?.email || '').toLowerCase();
|
||||
return username === 'mrdiderot' || email === 'mail.misch@pm.me';
|
||||
}
|
||||
|
||||
function ensureAdminPanelLink() {
|
||||
if (adminPanelLink || !dashboardMenuPanel) return adminPanelLink;
|
||||
|
||||
adminPanelLink = document.createElement('a');
|
||||
adminPanelLink.className = 'dashboard-menu-item';
|
||||
adminPanelLink.id = 'adminPanelLink';
|
||||
adminPanelLink.href = '/admin.html';
|
||||
adminPanelLink.textContent = 'Admin Panel';
|
||||
adminPanelLink.hidden = true;
|
||||
|
||||
dashboardMenuPanel.insertBefore(adminPanelLink, favoritesLink || loginButton || null);
|
||||
return adminPanelLink;
|
||||
}
|
||||
|
||||
function updateAuthNav() {
|
||||
const authenticated = MischLabsAuth.isAuthenticated();
|
||||
const claims = MischLabsAuth.claims();
|
||||
const username = String(claims?.preferred_username || '').toLowerCase();
|
||||
const email = String(claims?.email || '').toLowerCase();
|
||||
const isAdmin = authenticated && (username === 'mrdiderot' || email === 'mail.misch@pm.me');
|
||||
const isAdmin = authenticated && hasAdminAccess(claims);
|
||||
if (loginButton) loginButton.hidden = authenticated;
|
||||
if (logoutButton) logoutButton.hidden = !authenticated;
|
||||
if (favoritesLink) favoritesLink.hidden = !authenticated;
|
||||
if (adminPanelLink) adminPanelLink.hidden = !isAdmin;
|
||||
if (isAdmin) {
|
||||
const link = ensureAdminPanelLink();
|
||||
if (link) link.hidden = false;
|
||||
} else if (adminPanelLink) {
|
||||
adminPanelLink.remove();
|
||||
adminPanelLink = null;
|
||||
}
|
||||
if (userBadge) {
|
||||
userBadge.hidden = !authenticated;
|
||||
userBadge.textContent = authenticated ? MischLabsAuth.displayName() : '';
|
||||
|
||||
Reference in New Issue
Block a user