[UDT-005/006] Crear ProtectedRoute reutilizable con rol-check en frontend #5

Closed
opened 2026-04-15 14:19:43 +00:00 by dmolinari · 1 comment
Owner

Origen: UDT-003 (PR #4) — detectado al proteger /usuarios/nuevo por rol admin.

Contexto actual

  • En src/web/src/features/users/pages/CreateUserPage.tsx el guard de rol se hace inline: early return + navigate('/') si user.rol !== 'admin'.
  • Funciona para UDT-003 pero no es reutilizable.

Qué hay que hacer cuando se aterrice RBAC (UDT-005/006)

  • Crear un componente src/web/src/components/auth/ProtectedRoute.tsx que acepte una lista de roles y/o permisos requeridos (requiredRoles?: string[], requiredPermissions?: string[]).
  • Integrarlo en router.tsx como wrapper de las rutas protegidas.
  • Reemplazar el guard inline de CreateUserPage.tsx por el nuevo ProtectedRoute.
  • Para permisos granulares, consumir el hook usePermission / CanPerform que se definirá en UDT-006.

Acceptance criteria

  • ProtectedRoute renderiza children sólo si el usuario cumple roles/permisos; si no, redirect a / o 403.
  • Test unit cubre: sin auth, rol incorrecto, rol correcto, permisos granulares.
  • CreateUserPage deja de tener guard inline y usa ProtectedRoute.
  • Todas las rutas protegidas del módulo Auth pasan por ProtectedRoute.

Archivo a consultar al retomar: engram sdd/udt-003-registro-usuarios/archive-report (deuda documentada).

**Origen**: UDT-003 (PR #4) — detectado al proteger `/usuarios/nuevo` por rol admin. **Contexto actual** - En `src/web/src/features/users/pages/CreateUserPage.tsx` el guard de rol se hace inline: early return + `navigate('/')` si `user.rol !== 'admin'`. - Funciona para UDT-003 pero no es reutilizable. **Qué hay que hacer cuando se aterrice RBAC (UDT-005/006)** - Crear un componente `src/web/src/components/auth/ProtectedRoute.tsx` que acepte una lista de roles y/o permisos requeridos (`requiredRoles?: string[]`, `requiredPermissions?: string[]`). - Integrarlo en `router.tsx` como wrapper de las rutas protegidas. - Reemplazar el guard inline de `CreateUserPage.tsx` por el nuevo `ProtectedRoute`. - Para permisos granulares, consumir el hook `usePermission` / `CanPerform` que se definirá en UDT-006. **Acceptance criteria** - [ ] `ProtectedRoute` renderiza children sólo si el usuario cumple roles/permisos; si no, redirect a `/` o 403. - [ ] Test unit cubre: sin auth, rol incorrecto, rol correcto, permisos granulares. - [ ] `CreateUserPage` deja de tener guard inline y usa `ProtectedRoute`. - [ ] Todas las rutas protegidas del módulo Auth pasan por `ProtectedRoute`. **Archivo a consultar al retomar**: engram `sdd/udt-003-registro-usuarios/archive-report` (deuda documentada).
dmolinari added the followup label 2026-04-15 14:19:43 +00:00
Author
Owner

Reasignado formalmente a UDT-006 (Middleware de Autorización). En UDT-005 las rutas /admin/permisos usan el ProtectedRoute actual (auth-only). El componente granular con requiredPermissions requiere que el enforcement backend exista, cosa que recién llega con UDT-006.

Reasignado formalmente a **UDT-006 (Middleware de Autorización)**. En UDT-005 las rutas `/admin/permisos` usan el `ProtectedRoute` actual (auth-only). El componente granular con `requiredPermissions` requiere que el enforcement backend exista, cosa que recién llega con UDT-006.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dmolinari/SIG-CM2.0#5