222 lines
11 KiB
Markdown
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 |
|