Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um hospital. Nem todos têm acesso a todas as áreas, certo? Médicos acessam prontuários, enfermeiros gerenciam medicamentos, e pacientes visualizam seus próprios dados. Este controle de acesso, baseado em funções (roles), é o que vamos implementar hoje com RBAC em nossas APIs. É um componente estratégico para a segurança e organização de aplicações modernas, vital para proteger informações sensíveis e garantir a integridade do sistema. Nesta aula, construiremos um sistema RBAC simples, mas funcional, usando Node.js e Express.
Conceito Fundamental (7 min)
Role-Based Access Control (RBAC) é um método para restringir o acesso a recursos com base nas funções dos usuários dentro de um sistema. A terminologia chave inclui: usuário, função (role) e permissão. Um usuário possui uma ou mais funções, e cada função tem um conjunto específico de permissões. Por exemplo, a função “Administrador” pode ter permissão para “criar”, “ler”, “atualizar” e “excluir” usuários, enquanto a função “Editor” pode ter permissão apenas para “ler” e “atualizar”.
Em produção, RBAC é usado em sistemas de gerenciamento de conteúdo (CMS), plataformas de e-commerce e aplicações corporativas. Integra-se com bancos de dados para armazenar informações de usuários e funções, e com middlewares para aplicar as regras de acesso. As vantagens incluem gestão simplificada de permissões, segurança aprimorada e auditoria facilitada. A principal desvantagem pode ser a complexidade inicial de configuração, especialmente em sistemas com muitas funções e permissões.
Implementação Prática (10 min)
const express = require('express');
const app = express();
// Simulação de banco de dados (em produção, use um banco de dados real)
const users = [
{ id: 1, name: 'Alice', role: 'admin' },
{ id: 2, name: 'Bob', role: 'editor' },
];
const roles = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
};
// Middleware para verificar permissões
function checkPermission(permission) {
return (req, res, next) => {
const user = users.find(u => u.id === parseInt(req.params.userId)); // Busca usuário pelo ID
if (!user) return res.status(404).send('Usuário não encontrado');
if (roles[user.role].includes(permission)) {
next(); // Usuário tem permissão
} else {
res.status(403).send('Acesso negado'); // Usuário não tem permissão
}
};
}
// Rotas protegidas por RBAC
app.get('/users/:userId', checkPermission('read'), (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.userId));
res.send(user);
});
app.post('/users/:userId', checkPermission('write'), (req, res) => {
// Lógica para atualizar usuário
res.send('Usuário atualizado');
});
app.delete('/users/:userId', checkPermission('delete'), (req, res) => {
// Lógica para deletar usuário
res.send('Usuário deletado');
});
// Inicia o servidor (HostGator Plano M compatível)
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(Servidor rodando na porta ${port}));
Exercício Hands-On (5 min)
Crie uma nova rota /articles/:articleId com os métodos GET, POST e DELETE. Implemente o RBAC para que apenas administradores possam criar e excluir artigos, enquanto editores e administradores possam lê-los. Utilize a mesma estrutura de checkPermission adaptando para artigos.
Solução:
Adicione as rotas /articles/:articleId e ajuste o middleware checkPermission para verificar as permissões para ‘articles’.
Testes:
Faça requisições GET, POST e DELETE para as rotas /users e /articles com diferentes IDs de usuário simulando diferentes roles. Observe as respostas do servidor para validar o funcionamento do RBAC.
Troubleshooting:
Verifique se as funções e permissões estão corretamente definidas. Certifique-se de que o middleware checkPermission está sendo chamado antes das rotas protegidas.
Próximos passos:
Explore bibliotecas de RBAC mais robustas como o node-acl. Integre com um banco de dados real para persistir as informações de usuários e funções. Implemente logging profissional para registrar os acessos e tentativas de acesso negadas.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!