MichalLytek / typegraphql-prisma

Prisma generator to emit TypeGraphQL types and CRUD resolvers from your Prisma schema
https://prisma.typegraphql.com
MIT License
887 stars 113 forks source link

ModelsEnhance don't work #467

Open ClauWeb69 opened 3 weeks ago

ClauWeb69 commented 3 weeks ago

Describe the issue I'm using apollo server, typegraphql-prisma, when I want to apply an authorize on a specific field with applyModelsEnhanceMap the change is as if it did not exist, I start the queries and I can still see the password

Are you able to make a PR that fix this?

import { ApolloServer, } from '@apollo/server';
import { startServerAndCreateNextHandler } from '@as-integrations/next';
import { PrismaClient } from '@prisma/client';

import { resolvers, ModelsEnhanceMap,  applyModelsEnhanceMap,  Role } from "@/../prisma/generated/type-graphql";
import { AuthChecker, Authorized, buildSchema,  createMethodMiddlewareDecorator, createParameterDecorator } from "type-graphql";
import { NextRequest } from 'next/server';

const prisma = new PrismaClient();

export const authChecker: AuthChecker<{ user: { role: string } }> = ({ context: { user } }, roles) => {
  return false;
};

const modelsEnhanceMap: ModelsEnhanceMap = {
  User: {
    fields: {
      password: [Authorized("ADMIN")],
    },
  },
};
applyModelsEnhanceMap(modelsEnhanceMap);

const schema = await buildSchema({
  resolvers,
  validate: false,
  authChecker,
});

const server = new ApolloServer({
  schema
});
const nextHandlerPromise = startServerAndCreateNextHandler(server, {
  context: async () => ({ user: { id: "cm0wf7tkb0000yi5cjb7lrwrv", role: Role.USER }, prisma }),
})

const handler = async (req: NextRequest) => {
  const nextHandler = await nextHandlerPromise;
  return nextHandler(req);
};

export { handler as GET, handler as POST };

Additional context I tried to do the same with applyResolversEnhanceMap on the entire model and it works perfectly