perf: requireAdmin — 2 queries → 1 (User + userRoles eager join TypeORM)
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import { Response, NextFunction } from "express";
|
||||
import { AppDataSource } from "../config/data-source";
|
||||
import { User } from "../entities/User";
|
||||
import { UserRole } from "../entities/UserRole";
|
||||
import { AuthenticatedRequest } from "./auth.middleware";
|
||||
import logger from "../utils/logger";
|
||||
|
||||
@@ -19,6 +18,7 @@ export const requireAdmin = async (
|
||||
try {
|
||||
const localUser = await AppDataSource.getRepository(User).findOne({
|
||||
where: { superOAuthId: req.user.id },
|
||||
relations: { userRoles: { role: true } },
|
||||
});
|
||||
|
||||
if (!localUser) {
|
||||
@@ -26,12 +26,7 @@ export const requireAdmin = async (
|
||||
return;
|
||||
}
|
||||
|
||||
const userRoles = await AppDataSource.getRepository(UserRole).find({
|
||||
where: { userId: localUser.id },
|
||||
relations: ["role"],
|
||||
});
|
||||
|
||||
const slugs = userRoles.map((ur) => ur.role.slug);
|
||||
const slugs = localUser.userRoles.map((ur) => ur.role.slug);
|
||||
const isAdmin = slugs.includes("admin") || slugs.includes("super_admin");
|
||||
|
||||
if (!isAdmin) {
|
||||
|
||||
Reference in New Issue
Block a user