Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ private async Task<HashSet<Guid>> GetAllowedAccountIds(Actor actor, Cancellation
if (!perms.Any()) return [];
if (perms.Any(p => p.CuentaId is null && p.TitularId is null &&
(p.PuedeAgregarLineas || p.PuedeEditarLineas || p.PuedeEliminarLineas ||
p.PuedeImportar || p.PuedeVerDashboard)))
p.PuedeImportar)))
{
return [.. await _db.Cuentas.Select(c => c.Id).ToListAsync(ct)];
}
Expand Down Expand Up @@ -618,7 +618,7 @@ private async Task<bool> CanViewTitular(Actor actor, Guid titularId, Cancellatio

if (perms.Any(p => p.CuentaId is null && p.TitularId is null &&
(p.PuedeAgregarLineas || p.PuedeEditarLineas || p.PuedeEliminarLineas ||
p.PuedeImportar || p.PuedeVerDashboard)))
p.PuedeImportar)))
{
return true;
}
Expand Down
30 changes: 30 additions & 0 deletions Documentacion/DOCUMENTACION_CAMBIOS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6763,3 +6763,33 @@ Regla de trabajo desde ahora:
- Volver a correr `dotnet test` y `dotnet build -c Release` tras los cambios en middleware, backup/export y controladores de integracion antes del proximo paquete de release.
- Regenerar cualquier paquete existente en `Atlas Balance/Atlas Balance Release/` si se publico con los csproj antiguos, porque podia contener `appsettings.Development.json` dentro del zip.
- Rotar los secretos de desarrollo (`JwtSettings:SecretKey`, `WatchdogSettings:SharedSecret`, `SeedAdmin:Password`, `ConnectionStrings:DefaultConnection`) si alguna vez salieron de esta maquina, ya que hasta este cambio viajaban empaquetados al publicar.

---
## 2026-04-23 - Fix seguridad permisos dashboard en extractos (V-01.02)

**Version:** V-01.02

**Trabajo realizado:** Se corrigio la validacion de alcance global en `ExtractosController` para que un permiso global con solo `PuedeVerDashboard` no otorgue acceso transversal a extractos/cuentas.

**Archivos tocados:**
- `Atlas Balance/backend/src/GestionCaja.API/Controllers/ExtractosController.cs`
- `Documentacion/DOCUMENTACION_CAMBIOS.md`
- `Documentacion/LOG_ERRORES_INCIDENCIAS.md`

**Cambios implementados:**
- `GetAllowedAccountIds` deja de tratar `PuedeVerDashboard` como permiso de acceso global de datos; ahora solo cuenta `Agregar/Editar/Eliminar/Importar`.
- `CanViewTitular` se alinea con el mismo criterio para evitar inconsistencias de alcance dentro del mismo controlador.
- Se mantiene el comportamiento para admins y para permisos explicitos por `CuentaId`/`TitularId`.

**Comandos ejecutados:**
- `sed -n '540,660p' 'Atlas Balance/backend/src/GestionCaja.API/Controllers/ExtractosController.cs'`
- `sed -n '60,130p' 'Atlas Balance/backend/src/GestionCaja.API/Services/UserAccessService.cs'`
- `dotnet --version`
- `git diff -- 'Atlas Balance/backend/src/GestionCaja.API/Controllers/ExtractosController.cs'`

**Resultado de verificacion:**
- Verificacion estatica OK: el criterio de acceso global del controlador queda alineado con `UserAccessService` (sin `PuedeVerDashboard`).
- No se pudieron ejecutar tests/build porque `dotnet` no esta disponible en este entorno.

**Pendientes:**
- Ejecutar `dotnet test "Atlas Balance/backend/GestionCaja.sln" -c Release` en un entorno con SDK .NET instalado.
6 changes: 6 additions & 0 deletions Documentacion/LOG_ERRORES_INCIDENCIAS.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,3 +215,9 @@
- Contexto: `phase2-smoke.ps1`, `phase2-smoke-curl.ps1`, `Otros/Raiz anterior/SPEC.md` y `CORRECCIONES.md` contenian passwords/usuarios concretos.
- Causa: artefactos antiguos de pruebas y planificacion quedaron con datos reales aunque viven en `Otros/` (fuera del repo principal, pero presentes en la maquina de trabajo).
- Solucion aplicada: los scripts leen las passwords de `ATLAS_SMOKE_ADMIN_PASSWORD`/`ATLAS_SMOKE_TEST_PASSWORD` (fallan si no existen). Los documentos historicos sustituyen los valores por placeholders.

### 2026-04-23 - V-01.02 - `PuedeVerDashboard` otorgaba acceso global de extractos

- Contexto: `ExtractosController.GetAllowedAccountIds` consideraba un permiso global con `PuedeVerDashboard=true` como acceso total y devolvia todas las cuentas, ampliando el alcance de `/api/extractos` para usuarios no admin.
- Causa: desalineacion respecto a `UserAccessService`, que solo interpreta `Agregar/Editar/Eliminar/Importar` como permisos de acceso global de datos.
- Solucion aplicada: se elimino `PuedeVerDashboard` del criterio de acceso global en `GetAllowedAccountIds` y en `CanViewTitular` dentro de `ExtractosController`.
Loading