fix: requireAdmin résout le user local par superOAuthId
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 59s

This commit is contained in:
2026-03-14 15:14:03 +01:00
parent c7815aac2f
commit 27e6541425

View File

@@ -1,12 +1,13 @@
import { Response, NextFunction } from "express"; import { Response, NextFunction } from "express";
import { AppDataSource } from "../config/data-source"; import { AppDataSource } from "../config/data-source";
import { User } from "../entities/User";
import { UserRole } from "../entities/UserRole"; import { UserRole } from "../entities/UserRole";
import { AuthenticatedRequest } from "./auth.middleware"; import { AuthenticatedRequest } from "./auth.middleware";
/** /**
* Middleware requireAdmin — s'exécute APRÈS requireAuth. * Middleware requireAdmin — s'exécute APRÈS requireAuth.
* Charge les rôles de l'utilisateur depuis la DB et vérifie * Résout l'utilisateur local par superOAuthId (req.user.id est l'ID SuperOAuth),
* la présence du slug "admin" ou "super_admin". * charge ses rôles et vérifie la présence du slug "admin" ou "super_admin".
* Retourne 403 FORBIDDEN si la condition n'est pas remplie. * Retourne 403 FORBIDDEN si la condition n'est pas remplie.
*/ */
export const requireAdmin = async ( export const requireAdmin = async (
@@ -15,10 +16,17 @@ export const requireAdmin = async (
next: NextFunction next: NextFunction
): Promise<void> => { ): Promise<void> => {
try { try {
const userId = req.user.id; const localUser = await AppDataSource.getRepository(User).findOne({
where: { superOAuthId: req.user.id },
});
if (!localUser) {
res.status(403).json({ success: false, error: "FORBIDDEN" });
return;
}
const userRoles = await AppDataSource.getRepository(UserRole).find({ const userRoles = await AppDataSource.getRepository(UserRole).find({
where: { userId }, where: { userId: localUser.id },
relations: ["role"], relations: ["role"],
}); });