57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import { getUserFromToken, readUsers, hasAnyRole, hasRole, migrateUserRoles } from '../../../utils/auth.js'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
const token = getCookie(event, 'auth_token')
|
|
const currentUser = await getUserFromToken(token)
|
|
|
|
// Seite darf von Admin ODER Vorstand genutzt werden
|
|
if (!currentUser || !hasAnyRole(currentUser, 'admin', 'vorstand')) {
|
|
throw createError({
|
|
statusCode: 403,
|
|
message: 'Zugriff verweigert'
|
|
})
|
|
}
|
|
|
|
const users = await readUsers()
|
|
|
|
const isVorstand = hasRole(currentUser, 'vorstand')
|
|
|
|
// Nur Admin oder Vorstand duerfen vollen Benutzer-Contact und Rollen sehen.
|
|
const canSeePrivate = hasAnyRole(currentUser, 'admin', 'vorstand')
|
|
|
|
const safeUsers = users.map(u => {
|
|
const migrated = migrateUserRoles({ ...u })
|
|
const roles = Array.isArray(migrated.roles) ? migrated.roles : (migrated.role ? [migrated.role] : ['mitglied'])
|
|
|
|
return canSeePrivate
|
|
? {
|
|
id: u.id,
|
|
email: u.email,
|
|
name: u.name,
|
|
roles: roles,
|
|
role: roles[0] || 'mitglied',
|
|
phone: u.phone || '',
|
|
active: u.active,
|
|
created: u.created,
|
|
lastLogin: u.lastLogin
|
|
}
|
|
: {
|
|
id: u.id,
|
|
name: u.name,
|
|
role: roles[0] || 'mitglied',
|
|
active: u.active,
|
|
lastLogin: u.lastLogin
|
|
}
|
|
})
|
|
|
|
return {
|
|
users: safeUsers
|
|
}
|
|
} catch (error) {
|
|
console.error('Fehler beim Laden der Benutzer:', error)
|
|
throw error
|
|
}
|
|
})
|
|
|