No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

20 Días
1 Hrs
13 Min
58 Seg

Validar roles

20/24
Recursos

Link de interés:

GraphQL Shield

Aportes 1

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Validacion de Roles

primero refactorizamos la funcion que recibe el context y revisa si el jwt es valido

const boom = require('@hapi/boom')
const checkJwtGql =async(context)=>{
  const {user}= await context.authenticate('jwt',
  {session:false});
  // console.log(context.req.headers["authorization"])
 // usamos la estrategia de jwt
  if(!user){
    throw boom.unauthorized('jwt is not valid')
  }
  return user
}
module.exports = checkJwtGql

funcion que valida los roles, pasandole el usuario

const boom = require('@hapi/boom')
const checkRoleGql =(user,...roles)=>{
  if(!roles.includes(user.role)){
    throw boom.unauthorized('role is not valid for this request')
  }
  return user
}
module.exports = checkRoleGql

aplicamos las funciones en el resolver que requiera authenticacion

const CategoryService = require("../../services/category.service");
const checkRoleGql = require("../../utils/auth/checkRoleGql");
const checkJwtGql = require("../../utils/auth/checkJwtGql");

const service = new CategoryService();

const allCategories= async()=>{
  const categories = await service.find();
  return categories
}
const addCategory = async (root, {dto},context)=>{
  const user = await checkJwtGql(context) //validate jtw
  checkRoleGql(user,'admin') ; // validate Role
  const newCategory = await service.create(dto);
  return newCategory;
}
const categoryById = async (root, args)=>{
  console.log(args)
  const category = await service.findOne(args.id);
  return category
}

module.exports= {allCategories, categoryById, addCategory}