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