UNPKG

trpc-shield

Version:

tRPC permissions as another layer of abstraction!

46 lines (40 loc) 1.18 kB
import { initTRPC } from '@trpc/server'; import { z } from 'zod'; import type { Context } from './context'; import { permissions } from './permissions'; const t = initTRPC.context<Context>().create(); const shieldMiddleware = t.middleware(permissions); const procedure = t.procedure; const protectedProcedure = procedure.use(shieldMiddleware); const router = t.router; const userInput = z.object({ username: z.string().min(3), email: z.string().email(), password: z.string().min(6), }); const userRouter = router({ list: protectedProcedure.query(async ({ ctx }) => { return ctx.prisma.user.findMany({ orderBy: { createdAt: 'desc' }, take: 25, }); }), byId: protectedProcedure .input(z.object({ id: z.number().int().positive() })) .query(async ({ ctx, input }) => { return ctx.prisma.user.findUnique({ where: { id: input.id }, }); }), create: protectedProcedure .input(userInput) .mutation(async ({ ctx, input }) => { return ctx.prisma.user.create({ data: input, }); }), }); export const appRouter = router({ user: userRouter, }); export type AppRouter = typeof appRouter;