erp-core/docs/03-requerimientos/RF-rbac/INDICE-RF-ROLE.md

222 lines
11 KiB
Markdown

# Indice de Requerimientos Funcionales - MGN-003 Roles/RBAC
## Resumen del Modulo
| Campo | Valor |
|-------|-------|
| **Modulo** | MGN-003 |
| **Nombre** | Roles y RBAC |
| **Descripcion** | Control de acceso basado en roles |
| **Total RFs** | 4 |
| **Story Points** | 64 |
| **Estado** | Ready |
| **Fecha** | 2025-12-05 |
---
## Lista de Requerimientos
| ID | Nombre | Prioridad | SP | Estado |
|----|--------|-----------|-----|--------|
| [RF-ROLE-001](./RF-ROLE-001.md) | CRUD de Roles | P0 | 20 | Ready |
| [RF-ROLE-002](./RF-ROLE-002.md) | Gestion de Permisos | P0 | 12 | Ready |
| [RF-ROLE-003](./RF-ROLE-003.md) | Asignacion de Roles a Usuarios | P0 | 17 | Ready |
| [RF-ROLE-004](./RF-ROLE-004.md) | Guards y Middlewares RBAC | P0 | 15 | Ready |
---
## Diagrama de Dependencias
```
┌─────────────────┐
│ RF-AUTH-001 │
│ (Login/JWT) │
└────────┬────────┘
┌─────────────────────────────────────────────────────────────────┐
│ MGN-003: Roles/RBAC │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ RF-ROLE-002 │◄─────────│ RF-ROLE-001 │ │
│ │ Permisos │ │ CRUD Roles │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ │ ┌──────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────┐ │
│ │ RF-ROLE-003 │ │
│ │ Asignacion Roles-Usuarios │ │
│ └─────────────┬───────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────┐ │
│ │ RF-ROLE-004 │ │
│ │ Guards y Middlewares │ │
│ └─────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
┌──────────────────────────┐
│ Todos los endpoints │
│ del sistema usan RBAC │
└──────────────────────────┘
```
---
## Arquitectura del Sistema RBAC
```
┌─────────────────────────────────────────────────────────────────┐
│ RBAC Architecture │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ User │──────│ Role │──────│ Permission │ │
│ └─────────┘ M:N └─────────┘ M:N └─────────────┘ │
│ │
│ Un usuario puede tener multiples roles │
│ Un rol puede tener multiples permisos │
│ Permisos efectivos = Union de permisos de todos los roles │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Formato de Permisos: modulo:accion │
│ modulo:recurso:accion │
│ │
│ Wildcards: users:* (todas las acciones) │
│ inventory:products:* │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Flujo de Validacion: │
│ │
│ Request → JwtGuard → TenantGuard → RbacGuard → Controller │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Cache │ │
│ │ (5 min) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Roles del Sistema (Built-in)
| Rol | Slug | Permisos Base | Modificable |
|-----|------|---------------|-------------|
| Super Administrador | super_admin | Todos (*) | No |
| Administrador | admin | Gestion tenant | Solo extender |
| Gerente | manager | Lectura + reportes | Solo extender |
| Usuario | user | Acceso basico | Solo extender |
| Invitado | guest | Solo dashboard | Solo extender |
---
## Catalogo de Permisos por Modulo
### MGN-001 Auth (2 permisos)
- `auth:sessions:read`
- `auth:sessions:revoke`
### MGN-002 Users (7 permisos)
- `users:read`, `users:create`, `users:update`, `users:delete`
- `users:activate`, `users:export`, `users:import`
### MGN-003 Roles (6 permisos)
- `roles:read`, `roles:create`, `roles:update`, `roles:delete`
- `roles:assign`, `permissions:read`
### MGN-004 Tenants (3 permisos)
- `tenants:read`, `tenants:update`, `tenants:billing`
### MGN-006 Settings (2 permisos)
- `settings:read`, `settings:update`
### MGN-007 Audit (2 permisos)
- `audit:read`, `audit:export`
### MGN-009 Reports (4 permisos)
- `reports:read`, `reports:create`, `reports:export`, `reports:schedule`
### MGN-010 Financial (6 permisos)
- `financial:accounts:read`, `financial:accounts:manage`
- `financial:transactions:read`, `financial:transactions:create`, `financial:transactions:approve`
- `financial:reports:read`
### MGN-011 Inventory (8 permisos)
- `inventory:products:read`, `inventory:products:create`, `inventory:products:update`, `inventory:products:delete`
- `inventory:stock:read`, `inventory:stock:adjust`
- `inventory:movements:read`, `inventory:movements:create`
**Total: ~40 permisos base**
---
## Estimacion Total
| Capa | Story Points |
|------|--------------|
| Backend: Endpoints | 15 |
| Backend: Guards/Decorators | 10 |
| Backend: Logica permisos | 8 |
| Backend: Cache | 4 |
| Backend: Tests | 10 |
| Frontend: RolesPage | 6 |
| Frontend: PermissionSelector | 4 |
| Frontend: RoleAssignment | 5 |
| Frontend: Tests | 6 |
| **Total** | **68 SP** |
> Nota: Los 64 SP indicados en resumen corresponden a la suma de RF individuales.
> La estimacion detallada es de 68 SP incluyendo integracion.
---
## Definition of Done del Modulo
- [ ] RF-ROLE-001: CRUD de roles completo
- [ ] RF-ROLE-002: Catalogo de permisos seeded
- [ ] RF-ROLE-003: Asignacion roles-usuarios funcional
- [ ] RF-ROLE-004: Guards aplicados a todos los endpoints
- [ ] Cache de permisos implementado
- [ ] Tests unitarios > 80% coverage
- [ ] Tests e2e de flujos RBAC
- [ ] Documentacion Swagger completa
- [ ] Code review aprobado
- [ ] Security review aprobado
---
## Notas de Implementacion
### Orden Recomendado
1. **Primero**: RF-ROLE-002 (Permisos) - Seed inicial de permisos
2. **Segundo**: RF-ROLE-001 (Roles) - CRUD de roles con permisos
3. **Tercero**: RF-ROLE-003 (Asignacion) - Vincular usuarios y roles
4. **Cuarto**: RF-ROLE-004 (Guards) - Proteger todos los endpoints
### Consideraciones de Seguridad
- Nunca revelar que permiso falta en errores 403
- Logs de acceso denegado para auditoria
- Super Admin no debe poder eliminarse a si mismo
- Cache de permisos debe invalidarse al cambiar roles
- Validar permisos en CADA request (no confiar en frontend)
---
## Historial
| Version | Fecha | Autor | Cambios |
|---------|-------|-------|---------|
| 1.0 | 2025-12-05 | System | Creacion inicial con 4 RFs |