Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Níveis de acesso de usuários.

Boa tarde \o/

Neste mesmo projeto (do curso Node.js Parte 2: MVC) eu gostaria de implementar uma dinâmica de diferentes níveis de acesso de usuário, por exemplo, um tipo de usuário comum que pode apenas listar os livros e um tipo administrador que pode inserir, atualizar e excluir.

Não consegui pensar em uma forma prática de fazer isso, alguém poderia me dar alguma dica ou indicar alguma fonte?

Muito obrigado.

1 resposta
solução!

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.