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

  1. Entendre què és el control d'accés basat en rols.
  2. Aprendre a definir rols i permisos.
  3. Implementar RBAC en una aplicació Node.js utilitzant Express.js i middleware.
  4. 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

  1. Rols: Conjunts de permisos que poden ser assignats a usuaris.
  2. Permisos: Accions que un usuari pot realitzar.
  3. 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

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats