From 5be3855bcdb7cf606fafab4693bb442da8a05d9c Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 20 Oct 2025 21:04:20 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Robustere=20Fehlerbehandlung=20f=C3=BCr?= =?UTF-8?q?=20Falukant-Account-Check=20im=20Men=C3=BC-Filtering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Füge try-catch zu hasFalukantAccount() hinzu um DB-Fehler abzufangen - Füge try-catch zu filterMenu() hinzu für zusätzliche Sicherheit - Verhindert Crash wenn Falukant-User-Tabelle nicht verfügbar ist - Fallback: return false wenn Fehler auftritt --- backend/controllers/navigationController.js | 41 +++++++++++++-------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/backend/controllers/navigationController.js b/backend/controllers/navigationController.js index 40186cb..1a1625e 100644 --- a/backend/controllers/navigationController.js +++ b/backend/controllers/navigationController.js @@ -307,21 +307,27 @@ class NavigationController { async filterMenu(menu, rights, age, userId) { const filteredMenu = {}; - const hasFalukantAccount = await this.hasFalukantAccount(userId); - for (const [key, value] of Object.entries(menu)) { - if (value.visible.includes("all") - || value.visible.some(v => rights.includes(v)) || (value.visible.includes("anyadmin") && rights.length > 0) - || (value.visible.includes("over14") && age >= 14) - || (value.visible.includes("over12") && age >= 12) - || (value.visible.includes("over18") && age >= 18) - || (value.visible.includes('nofalukantaccount') && !hasFalukantAccount) - || (value.visible.includes('hasfalukantaccount') && hasFalukantAccount)) { - const { visible, ...itemWithoutVisible } = value; - filteredMenu[key] = { ...itemWithoutVisible }; - if (value.children) { - filteredMenu[key].children = await this.filterMenu(value.children, rights, age, userId); + try { + const hasFalukantAccount = await this.hasFalukantAccount(userId); + for (const [key, value] of Object.entries(menu)) { + if (value.visible.includes("all") + || value.visible.some(v => rights.includes(v)) || (value.visible.includes("anyadmin") && rights.length > 0) + || (value.visible.includes("over14") && age >= 14) + || (value.visible.includes("over12") && age >= 12) + || (value.visible.includes("over18") && age >= 18) + || (value.visible.includes('nofalukantaccount') && !hasFalukantAccount) + || (value.visible.includes('hasfalukantaccount') && hasFalukantAccount)) { + const { visible, ...itemWithoutVisible } = value; + filteredMenu[key] = { ...itemWithoutVisible }; + if (value.children) { + filteredMenu[key].children = await this.filterMenu(value.children, rights, age, userId); + } } } + } catch (error) { + console.error('Error filtering menu:', error); + // Return empty menu if filtering fails + return {}; } return filteredMenu; } @@ -363,8 +369,13 @@ class NavigationController { } async hasFalukantAccount(userId) { - const falukantUser = await FalukantUser.findOne({ where: { userId: userId } }); - return falukantUser !== null; + try { + const falukantUser = await FalukantUser.findOne({ where: { userId: userId } }); + return falukantUser !== null; + } catch (error) { + console.error('Error checking falukant account:', error); + return false; // Fallback: assume no falukant account if error occurs + } } }