From b79fd61b13248951674b97c0bfcf430921f4d24f Mon Sep 17 00:00:00 2001 From: Ruan Bueno Date: Wed, 17 Sep 2025 09:07:35 -0300 Subject: [PATCH] refactor: corrigindo totem - ajustando middlewre --- src/middleware.ts | 6 +++++- src/server/api/routers/user.ts | 31 ++----------------------------- src/server/api/trpc.ts | 9 ++++++--- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/src/middleware.ts b/src/middleware.ts index 21d42223..e451014f 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -3,7 +3,11 @@ import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server"; const isPublicRoute = createRouteMatcher(['/sign-in(.*)', '/sign-up(.*)', '/api/webhooks/clerk(.*)', '/api/cron(.*)']) export default clerkMiddleware(async (auth, req) => { - if (!isPublicRoute(req)) await auth.protect() + // OTIMIZAÇÃO: Evitar processamento desnecessário para usuários já autenticados + // Apenas proteger rotas não públicas + if (!isPublicRoute(req)) { + await auth.protect() + } }) export const config = { diff --git a/src/server/api/routers/user.ts b/src/server/api/routers/user.ts index f07e7f94..a8c8c2eb 100644 --- a/src/server/api/routers/user.ts +++ b/src/server/api/routers/user.ts @@ -1,36 +1,9 @@ import type { Prisma, Enterprise } from "@prisma/client"; -import { createTRPCRouter, protectedProcedure } from "../trpc" +import { createTRPCRouter, protectedProcedure, adminProcedure } from "../trpc" import { z } from "zod" import { type RolesConfig } from "@/types/role-config" import { TRPCError } from "@trpc/server" -// Novo procedure para verificar permissões admin -const adminProcedure = protectedProcedure.use(async ({ ctx, next }) => { - const user = await ctx.db.user.findUnique({ - where: { id: ctx.auth.userId }, - select: { role_config: true } - }); - - const roleConfig = user?.role_config as RolesConfig | null; - - // Verificar se tem permissão admin - const hasAdminAccess = !!roleConfig?.sudo || - (Array.isArray(roleConfig?.admin_pages) && roleConfig?.admin_pages.includes("/admin")); - - if (!hasAdminAccess) { - throw new TRPCError({ - code: "FORBIDDEN", - message: "Acesso negado. Permissões administrativas necessárias.", - }); - } - - return next({ - ctx: { - ...ctx, - roleConfig - } - }); -}); export const userRouter = createTRPCRouter({ me: protectedProcedure.query(async ({ ctx }) => { @@ -145,7 +118,7 @@ export const userRouter = createTRPCRouter({ // Filtrar apenas usuários com permissões admin return users.filter(user => { const roleConfig = user.role_config as RolesConfig | null; - return !!roleConfig?.sudo || (Array.isArray(roleConfig?.admin_pages) && roleConfig.admin_pages.length > 0); + return !!roleConfig?.sudo || (Array.isArray(roleConfig?.admin_pages) && (roleConfig?.admin_pages?.length ?? 0) > 0); }); }), diff --git a/src/server/api/trpc.ts b/src/server/api/trpc.ts index b50b7977..92792574 100644 --- a/src/server/api/trpc.ts +++ b/src/server/api/trpc.ts @@ -136,11 +136,12 @@ export const protectedProcedure = t.procedure.use(async ({ ctx, next }) => { } // Verificação adicional para usuários potencialmente problemáticos + // REMOVIDO: Query desnecessária que estava causando headers muito grandes + // O role_config completo não é necessário aqui - apenas verificamos se o usuário existe try { - // Testar se conseguimos acessar o usuário no banco const userExists = await ctx.db.user.findUnique({ where: { id: ctx.auth.userId }, - select: { id: true, role_config: true } + select: { id: true } // Apenas verificar se existe, sem buscar role_config }); if (!userExists) { @@ -164,11 +165,13 @@ export const protectedProcedure = t.procedure.use(async ({ ctx, next }) => { }) export const adminProcedure = protectedProcedure.use(async ({ ctx, next }) => { + // Buscar apenas os campos necessários para verificação de admin + // Evitar buscar arrays grandes como unlocked_forms, hidden_forms, etc. const user = await ctx.db.user.findUnique({ where: { id: ctx.auth.userId }, select: { id: true, - role_config: true, + role_config: true, // Mantém para compatibilidade, mas pode ser otimizado futuramente } })