# MGN-003: Roles y Permisos

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | MGN-003 |
| **Nombre** | Roles y Permisos (RBAC) |
| **Fase** | 01 - Foundation |
| **Prioridad** | P0 (Critico) |
| **Story Points** | 40 SP |
| **Estado** | Documentado |
| **Dependencias** | MGN-001, MGN-002 |

---

## Descripcion

Sistema de control de acceso basado en roles (Role-Based Access Control) que permite:

- Definir roles con conjuntos de permisos
- Crear permisos granulares por modulo/accion/recurso
- Asignar multiples roles a usuarios
- Verificar permisos en tiempo de ejecucion
- Roles de sistema predefinidos (admin, user, etc.)

---

## Modelo de Permisos

```
Permission = module:action:resource

Ejemplos:
- users:read:all      -> Leer todos los usuarios
- users:read:own      -> Leer solo su usuario
- users:write:all     -> Escribir todos los usuarios
- sales:create:orders -> Crear ordenes de venta
- reports:export:*    -> Exportar cualquier reporte
```

---

## Roles de Sistema

| Rol | Descripcion | Permisos |
|-----|-------------|----------|
| super_admin | Administrador global | Todos (*:*:*) |
| tenant_admin | Admin de tenant | Todos en su tenant |
| user | Usuario basico | Lectura propia |

---

## Endpoints API

| Metodo | Path | Descripcion |
|--------|------|-------------|
| GET | `/api/v1/roles` | Listar roles |
| POST | `/api/v1/roles` | Crear rol |
| GET | `/api/v1/roles/:id` | Obtener rol |
| PATCH | `/api/v1/roles/:id` | Actualizar rol |
| DELETE | `/api/v1/roles/:id` | Eliminar rol |
| GET | `/api/v1/permissions` | Listar permisos |
| POST | `/api/v1/users/:id/roles` | Asignar rol a usuario |
| DELETE | `/api/v1/users/:id/roles/:roleId` | Quitar rol |
| GET | `/api/v1/users/:id/permissions` | Permisos de usuario |

---

## Guards y Decoradores

```typescript
// Decorador de roles
@Roles('admin', 'manager')
@Get('admin-only')
adminEndpoint() {}

// Decorador de permisos
@RequirePermission('users', 'read', 'all')
@Get('users')
getUsers() {}

// Guard combinado
@UseGuards(JwtAuthGuard, RolesGuard, PermissionsGuard)
```

---

## Documentacion

- **Mapa del modulo:** [_MAP.md](./_MAP.md)
- **Trazabilidad:** [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml)

---

**Generado por:** Requirements-Analyst
**Fecha:** 2025-12-05
