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 loginButton = document.querySelector('#dashboardLoginButton');
|
||||||
const logoutButton = document.querySelector('#dashboardLogoutButton');
|
const logoutButton = document.querySelector('#dashboardLogoutButton');
|
||||||
const favoritesLink = document.querySelector('#favoritesLink');
|
const favoritesLink = document.querySelector('#favoritesLink');
|
||||||
const adminPanelLink = document.querySelector('#adminPanelLink');
|
|
||||||
const userBadge = document.querySelector('#dashboardUserBadge');
|
const userBadge = document.querySelector('#dashboardUserBadge');
|
||||||
const dashboardMenuButton = document.querySelector('#dashboardMenuButton');
|
const dashboardMenuButton = document.querySelector('#dashboardMenuButton');
|
||||||
const dashboardMenuPanel = document.querySelector('#dashboardMenuPanel');
|
const dashboardMenuPanel = document.querySelector('#dashboardMenuPanel');
|
||||||
|
let adminPanelLink = null;
|
||||||
|
|
||||||
function normalize(value) {
|
function normalize(value) {
|
||||||
return String(value || '').toLowerCase().trim();
|
return String(value || '').toLowerCase().trim();
|
||||||
@@ -510,16 +510,40 @@ function toggleDashboardMenu() {
|
|||||||
dashboardMenuPanel.hidden = isOpen;
|
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() {
|
function updateAuthNav() {
|
||||||
const authenticated = MischLabsAuth.isAuthenticated();
|
const authenticated = MischLabsAuth.isAuthenticated();
|
||||||
const claims = MischLabsAuth.claims();
|
const claims = MischLabsAuth.claims();
|
||||||
const username = String(claims?.preferred_username || '').toLowerCase();
|
const isAdmin = authenticated && hasAdminAccess(claims);
|
||||||
const email = String(claims?.email || '').toLowerCase();
|
|
||||||
const isAdmin = authenticated && (username === 'mrdiderot' || email === 'mail.misch@pm.me');
|
|
||||||
if (loginButton) loginButton.hidden = authenticated;
|
if (loginButton) loginButton.hidden = authenticated;
|
||||||
if (logoutButton) logoutButton.hidden = !authenticated;
|
if (logoutButton) logoutButton.hidden = !authenticated;
|
||||||
if (favoritesLink) favoritesLink.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) {
|
if (userBadge) {
|
||||||
userBadge.hidden = !authenticated;
|
userBadge.hidden = !authenticated;
|
||||||
userBadge.textContent = authenticated ? MischLabsAuth.displayName() : '';
|
userBadge.textContent = authenticated ? MischLabsAuth.displayName() : '';
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
</button>
|
</button>
|
||||||
<nav class="dashboard-menu-panel" id="dashboardMenuPanel" aria-label="Dashboard Aktionen" hidden>
|
<nav class="dashboard-menu-panel" id="dashboardMenuPanel" aria-label="Dashboard Aktionen" hidden>
|
||||||
<span class="dashboard-menu-user" id="dashboardUserBadge" hidden></span>
|
<span class="dashboard-menu-user" id="dashboardUserBadge" hidden></span>
|
||||||
<a class="dashboard-menu-item" id="adminPanelLink" href="/admin.html" hidden>Admin Panel</a>
|
|
||||||
<a class="dashboard-menu-item" id="favoritesLink" href="/favorites.html" hidden>Favoriten verwalten</a>
|
<a class="dashboard-menu-item" id="favoritesLink" href="/favorites.html" hidden>Favoriten verwalten</a>
|
||||||
<button class="dashboard-menu-item" id="dashboardLoginButton" type="button">SSO Login</button>
|
<button class="dashboard-menu-item" id="dashboardLoginButton" type="button">SSO Login</button>
|
||||||
<button class="dashboard-menu-item is-danger" id="dashboardLogoutButton" type="button" hidden>Abmelden</button>
|
<button class="dashboard-menu-item is-danger" id="dashboardLogoutButton" type="button" hidden>Abmelden</button>
|
||||||
@@ -142,6 +141,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/auth.js?v=2" defer></script>
|
<script src="/auth.js?v=2" defer></script>
|
||||||
<script src="/app.js?v=36" defer></script>
|
<script src="/app.js?v=37" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
4
sw.js
4
sw.js
@@ -1,4 +1,4 @@
|
|||||||
const CACHE_NAME = 'mischlabs-pwa-v20';
|
const CACHE_NAME = 'mischlabs-pwa-v21';
|
||||||
const APP_SHELL = [
|
const APP_SHELL = [
|
||||||
'/',
|
'/',
|
||||||
'/index.html',
|
'/index.html',
|
||||||
@@ -6,7 +6,7 @@ const APP_SHELL = [
|
|||||||
'/offline.html',
|
'/offline.html',
|
||||||
'/style.css?v=30',
|
'/style.css?v=30',
|
||||||
'/auth.js?v=2',
|
'/auth.js?v=2',
|
||||||
'/app.js?v=36',
|
'/app.js?v=37',
|
||||||
'/favorites.js?v=1',
|
'/favorites.js?v=1',
|
||||||
'/services.json?v=1',
|
'/services.json?v=1',
|
||||||
'/manifest.webmanifest?v=4',
|
'/manifest.webmanifest?v=4',
|
||||||
|
|||||||
Reference in New Issue
Block a user