(user: AppUser | null | undefined)
| 148 | * group. If the user already has isAdmin set (e.g. a dev user), trust it. |
| 149 | */ |
| 150 | export async function enrichUserWithAdmin(user: AppUser | null | undefined): Promise<AppUser | null | undefined> { |
| 151 | if (!user) return user; |
| 152 | if (typeof user.isAdmin === 'boolean') return user; |
| 153 | |
| 154 | const adminEmails = process.env.ADMIN_EMAILS?.split(',').map(e => e.trim().toLowerCase()) || []; |
| 155 | if (adminEmails.includes(user.email.toLowerCase())) { |
| 156 | user.isAdmin = true; |
| 157 | return user; |
| 158 | } |
| 159 | |
| 160 | if (user.id) { |
| 161 | try { |
| 162 | user.isAdmin = await isWebUserAAOAdmin(user.id); |
| 163 | } catch (error) { |
| 164 | logger.warn({ error, userId: user.id }, 'Failed to resolve isAdmin via working group; defaulting to false'); |
| 165 | user.isAdmin = false; |
| 166 | } |
| 167 | } else { |
| 168 | user.isAdmin = false; |
| 169 | } |
| 170 | return user; |
| 171 | } |
| 172 | |
| 173 | /** |
| 174 | * Enrich a user object with membership status from the database. |
no test coverage detected