Fala aí Bruno, tudo bem? Eu fiz isso semana passada no meu trabalho, vou te mostrar mais ou menos como fiz e você verifica se lhe atende:
Basicamente, criei uma HOF (Hight order function), que recebe um array
de roles
e verifica se o usuário se o token
recebido pertence a pelo menos um desses roles
:
const checkRole = (checkRoles: string[]) => (req: Request, res: Response, next: Next) => {
const token = getToken(req)
const decoded = decodeJwt(token)
const userRole = decoded && decoded.user && decoded.user.role
if (userRole && not(checkRoles.some(role => role === userRole))) {
res.send(new errors.ForbiddenError())
next(false)
}
next()
}
Veja que a função checkRole
devolve um middleware
para ser usado nas rotas.
Depois na declaração de rotas, eu simplesmente passo os roles para elas:
router.get('', checkAuthorized, checkRole([roles.PERFIL1, roles.PERFIL2, roles.PERFIL3, roles.PERFIL4]), getAll)
Onde PERFIL1
, PERFIL2
, PERFIL3
e PERFIL4
serão os seus á serem verificados.
Espero ter ajudado.