Verbessere Mitgliederabfrage: Filtere manuelle Mitglieder nach aktiven/akzeptierten Status und entferne nicht benötigte Datenschutzlogik.
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 44s
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 44s
This commit is contained in:
@@ -24,9 +24,9 @@ export default defineEventHandler(async (event) => {
|
|||||||
|
|
||||||
const currentUser = await getUserFromToken(token)
|
const currentUser = await getUserFromToken(token)
|
||||||
|
|
||||||
// Get manual members and registered users
|
// Get manual members and registered users
|
||||||
const manualMembers = await readMembers()
|
const manualMembers = await readMembers()
|
||||||
const registeredUsers = await readUsers()
|
const registeredUsers = await readUsers()
|
||||||
|
|
||||||
// Merge members: combine manual + registered, detect duplicates
|
// Merge members: combine manual + registered, detect duplicates
|
||||||
const mergedMembers = []
|
const mergedMembers = []
|
||||||
@@ -35,9 +35,15 @@ export default defineEventHandler(async (event) => {
|
|||||||
const emailToIndexMap = new Map() // email -> index in mergedMembers
|
const emailToIndexMap = new Map() // email -> index in mergedMembers
|
||||||
const nameToIndexMap = new Map() // name -> index in mergedMembers
|
const nameToIndexMap = new Map() // name -> index in mergedMembers
|
||||||
|
|
||||||
// First, add all manual members and build lookup maps
|
// First, add manual members that are active/accepted (filter out pending applications)
|
||||||
for (let i = 0; i < manualMembers.length; i++) {
|
for (let i = 0; i < manualMembers.length; i++) {
|
||||||
const member = manualMembers[i]
|
const member = manualMembers[i]
|
||||||
|
// Normalize acceptance flags: accept if member.active===true or member.status==='accepted' or member.accepted===true
|
||||||
|
const isAccepted = member.active === true || (member.status && String(member.status).toLowerCase() === 'accepted') || member.accepted === true
|
||||||
|
if (!isAccepted) {
|
||||||
|
// Skip applications that are not yet accepted
|
||||||
|
continue
|
||||||
|
}
|
||||||
const normalizedEmail = member.email?.toLowerCase().trim() || ''
|
const normalizedEmail = member.email?.toLowerCase().trim() || ''
|
||||||
const fullName = `${member.firstName || ''} ${member.lastName || ''}`.trim()
|
const fullName = `${member.firstName || ''} ${member.lastName || ''}`.trim()
|
||||||
const normalizedName = fullName.toLowerCase()
|
const normalizedName = fullName.toLowerCase()
|
||||||
@@ -66,7 +72,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then add registered users (only active ones)
|
// Then add registered users (only active ones)
|
||||||
for (const user of registeredUsers) {
|
for (const user of registeredUsers) {
|
||||||
if (!user.active) continue
|
if (!user.active) continue
|
||||||
|
|
||||||
@@ -142,25 +148,12 @@ export default defineEventHandler(async (event) => {
|
|||||||
|
|
||||||
// Sort by name
|
// Sort by name
|
||||||
mergedMembers.sort((a, b) => a.name.localeCompare(b.name))
|
mergedMembers.sort((a, b) => a.name.localeCompare(b.name))
|
||||||
|
// Die Mitgliederliste ist nur für authentifizierte Nutzer sichtbar (siehe oben).
|
||||||
// Serverseitiger Datenschutz: nur Vorstands-Mitglieder erhalten volle Kontaktdaten/Logindaten
|
// Entsprechend zeigen wir allen eingeloggten Nutzer*innen die vollständigen Kontaktdaten
|
||||||
const isVorstand = hasRole(currentUser, 'vorstand')
|
// (inkl. Telefon und E-Mail) für alle aktiven Mitglieder.
|
||||||
|
|
||||||
// Für nicht-vorstandliche Anfragen liefern wir eine stark reduzierte, nicht-identifizierende
|
|
||||||
// Ansicht der Mitgliederliste (nur das Nötigste für öffentliche Anzeigen)
|
|
||||||
const safeMembers = isVorstand
|
|
||||||
? mergedMembers
|
|
||||||
: mergedMembers.map(m => ({
|
|
||||||
// Minimale, unkritische Felder
|
|
||||||
id: m.id,
|
|
||||||
name: m.name,
|
|
||||||
source: m.source,
|
|
||||||
isMannschaftsspieler: !!m.isMannschaftsspieler
|
|
||||||
}))
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
members: safeMembers
|
members: mergedMembers
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Abrufen der Mitgliederliste:', error)
|
console.error('Fehler beim Abrufen der Mitgliederliste:', error)
|
||||||
|
|||||||
Reference in New Issue
Block a user