fix: requireAdmin résout le user local par superOAuthId
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 59s
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 59s
This commit is contained in:
@@ -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"],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user