Boa noite Edgar, tudo bom? Bem eu para fazer esse tipo de validação usei o GraphQL Shield é uma biblioteca bem legal e fácil de mexer, onde você define as regras de acesso de acordo com o que você quer. Por exemplo no meu caso eu so fiz uma regra por enquanto, que só podem fazer executar query quem estiver autenticado.
import { rule } from 'graphql-shield';
import { getSellerId, Context } from '../utils';
const rules = {
isAuthenticatedSeller: rule()(
async (parent, args, ctx: Context): Promise<boolean> => {
const sellerId = getSellerId(ctx);
if (sellerId) {
const sellerExist = await ctx.prisma.$exists.seller({ id: sellerId });
return sellerExist;
}
return false;
},
),
};
export const Query = rules.isAuthenticatedSeller;
O que eu faço nesse código, crio um objeto rules onde eu tenho um atributo chamado isAutheticatedSeller, onde faço umas validações, e retorno um booleano, e no final eu exporto falando que todas as query's precisam de que o usuário esteja autenticado.
Tem um tutorial bem legal traduzido para portugues que fizeram que ilustra bem essa biblioteca.
GraphQL Shield - https://github.com/maticzav/graphql-shield
Tutorial - https://medium.com/@oieduardorabelo/graphql-conhecendo-o-graphql-shield-208edb45d3cf
OBS: Eu to usando Prisma como servidor de ORM, ele tbm opera usando GraphQL, entao voce nao precisa fazer tudo na mao os crud's, criar as tabelas, tudo mais prático. Link da documentação caso queria dar uma olhada e saber mais https://www.prisma.io/
Abraços.