En aquest tema, aprendrem com implementar el control d'accés basat en rols (RBAC) en una aplicació Node.js. El RBAC és una tècnica d'autenticació i autorització que permet assignar permisos a usuaris basats en els seus rols dins d'una organització. Això és especialment útil en aplicacions on diferents usuaris tenen diferents nivells d'accés i permisos.
Objectius
- Entendre què és el control d'accés basat en rols.
- Aprendre a definir rols i permisos.
- Implementar RBAC en una aplicació Node.js utilitzant Express.js i middleware.
- Provar el sistema de control d'accés.
Què és el Control d'Accés Basat en Rols?
El control d'accés basat en rols (RBAC) és un mètode per restringir l'accés a recursos basat en els rols dels usuaris dins d'una organització. Els rols són assignats a usuaris i cada rol té un conjunt de permisos associats. Això permet una gestió més fàcil i segura dels permisos d'accés.
Components Clau de RBAC
- Rols: Conjunts de permisos que poden ser assignats a usuaris.
- Permisos: Accions que un usuari pot realitzar.
- Usuaris: Entitats que poden tenir un o més rols assignats.
Definint Rols i Permisos
Primer, definirem alguns rols i permisos per a la nostra aplicació. Suposem que tenim una aplicació de gestió de projectes amb els següents rols:
- Admin: Pot gestionar usuaris i projectes.
- Project Manager: Pot gestionar projectes.
- Developer: Pot veure i actualitzar projectes.
Exemple de Definició de Rols i Permisos
const roles = { admin: ['manageUsers', 'manageProjects'], projectManager: ['manageProjects'], developer: ['viewProjects', 'updateProjects'] };
Implementant RBAC en una Aplicació Node.js
Pas 1: Configuració de l'Aplicació
Primer, configurem una aplicació bàsica d'Express.js.
const express = require('express'); const app = express(); const port = 3000; app.use(express.json()); app.listen(port, () => { console.log(`Server running on port ${port}`); });
Pas 2: Middleware d'Autenticació
Implementem un middleware d'autenticació que afegeix el rol de l'usuari a la sol·licitud.
const authenticate = (req, res, next) => { // Simulació d'autenticació const user = { id: 1, username: 'john_doe', role: 'developer' // Aquest rol hauria de venir d'un sistema d'autenticació real }; req.user = user; next(); }; app.use(authenticate);
Pas 3: Middleware d'Autorizació
Implementem un middleware d'autorització que verifica si l'usuari té els permisos necessaris per accedir a una ruta.
const authorize = (requiredPermissions) => { return (req, res, next) => { const userRole = req.user.role; const userPermissions = roles[userRole]; const hasPermission = requiredPermissions.every(permission => userPermissions.includes(permission)); if (!hasPermission) { return res.status(403).json({ message: 'Access Denied' }); } next(); }; };
Pas 4: Definint Rutes amb Control d'Accés
Definim algunes rutes que utilitzen el middleware d'autorització.
app.get('/projects', authorize(['viewProjects']), (req, res) => { res.json({ message: 'Viewing projects' }); }); app.post('/projects', authorize(['manageProjects']), (req, res) => { res.json({ message: 'Managing projects' }); }); app.put('/projects/:id', authorize(['updateProjects']), (req, res) => { res.json({ message: 'Updating project' }); });
Provar el Sistema de Control d'Accés
Per provar el sistema, podem utilitzar eines com Postman o cURL per fer sol·licituds a les rutes definides i verificar que només els usuaris amb els permisos adequats poden accedir-hi.
Exemple de Prova amb cURL
# Intentar veure projectes com a desenvolupador (hauria de tenir èxit) curl -H "Content-Type: application/json" -X GET http://localhost:3000/projects # Intentar gestionar projectes com a desenvolupador (hauria de fallar) curl -H "Content-Type: application/json" -X POST http://localhost:3000/projects
Resum
En aquest tema, hem après què és el control d'accés basat en rols i com implementar-lo en una aplicació Node.js utilitzant Express.js. Hem definit rols i permisos, creat middleware d'autenticació i autorització, i provat el sistema per assegurar-nos que funciona correctament. Amb aquest coneixement, podem gestionar de manera segura els permisos d'accés en les nostres aplicacions.
Curs de Node.js
Mòdul 1: Introducció a Node.js
Mòdul 2: Conceptes Bàsics
Mòdul 3: Sistema de Fitxers i I/O
Mòdul 4: HTTP i Servidors Web
Mòdul 5: NPM i Gestió de Paquets
Mòdul 6: Framework Express.js
- Introducció a Express.js
- Configuració d'una Aplicació Express
- Middleware
- Routing en Express
- Gestió d'Errors
Mòdul 7: Bases de Dades i ORMs
- Introducció a les Bases de Dades
- Utilitzar MongoDB amb Mongoose
- Utilitzar Bases de Dades SQL amb Sequelize
- Operacions CRUD
Mòdul 8: Autenticació i Autorització
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb Mocha i Chai
- Proves d'Integració
- Depuració d'Aplicacions Node.js
Mòdul 10: Temes Avançats
Mòdul 11: Desplegament i DevOps
- Variables d'Entorn
- Utilitzar PM2 per a la Gestió de Processos
- Desplegar a Heroku
- Integració i Desplegament Continu