23 Protección de la Interfaz (UI) en Laravel Ocultar Botones y Menú Dinamico Sistema Odontologíco

Duración: 18 min
Módulo: Seguridad Avanzada, Permisos & Control de UI Lección 3 de 3

Descripción

🎓 Lección 23: Protección de la Interfaz (UI) en Laravel: Ocultar Botones y Menú Dinámico

Objetivo General: Configurar la seguridad en la capa de presentación (UI) renderizando condicionalmente el menú de navegación lateral y los botones de acción CRUD en las vistas Blade mediante la directiva @can, garantizando que cada usuario únicamente visualice las opciones permitidas según su rol.

🚀 Pasos Clave de la Lección

  • 📊 Paso 1: Contador Dinámico de Permisos Asignados en el Listado de Roles

    Se agrega una columna informativa en la tabla de roles (index.blade.php) que calcula en tiempo real la cantidad de permisos activos (role->permissions->count()) asociados a cada rol.

    ⏱️ 00:54

  • 💬 Paso 2: Interacción con la Comunidad y Compatibilidad de Versiones (PHP/Laravel)

    Se abordan dudas sobre compatibilidad entre versiones de Laravel (10, 11, 12, 13) y PHP (8.2, 8.3), aclarando la ejecución segura del comando php artisan migrate.

    ⏱️ 02:47

  • 🛡️ Paso 3: Condicionar el Menú Lateral de Navegación con @can

    En la plantilla del Layout principal (tabler.blade.php), se envuelven las opciones del menú de navegación con la directiva @can('Ver [módulo]') para ocultar automáticamente los enlaces no autorizados.

    ⏱️ 08:25

  • Paso 4: Ocultar Botones de Creación y Modales de Registro

    Se protege el botón de registro "Nuevo Tratamiento" (y modales asociados) en la vista del módulo envolviéndolo con @can('guarda tratamientos'), evitando la exposición de controles inactivos.

    ⏱️ 011:19

  • ✏️ Paso 5: Protección Condicional de Botones de Acción en Tablas (Editar / Eliminar)

    Se encierran los botones de edición (@can('editar tratamientos')) y eliminación (@can('eliminar tratamientos')) en la tabla de datos, garantizando que el usuario solo vea las acciones que puede ejecutar.

    ⏱️ 012:54

  • 📁 Paso 6: Refactorización Global de Vistas Blade y Validación de UI

    Se extiende el uso de la directiva @can a todas las vistas del proyecto (Usuarios, Pacientes, Doctores, Especialidades, Horarios), logrando una interfaz limpia y adaptada al nivel de acceso.

    ⏱️ 015:39

🛠️ Comandos y Rutas Principales

TipoComando / Ruta HTTPDescripción / Propósito
Ruta GETGET /admin/tratamientosVista de listado de tratamientos con acciones filtradas dinámicamente por la UI.
Directiva@can('permiso') ... @endcanDirectiva de Blade para renderizar condicionalmente bloques de código HTML/UI.
Artisanphp artisan view:clearLimpia la caché de plantillas Blade para reflejar cambios inmediatos en la interfaz.
Artisanphp artisan route:list --path=adminLista todas las rutas administrativas para verificar los nombres de permisos requeridos.

🔒 Buenas Prácticas y Seguridad

  1. 🛡️ Seguridad en Capas (Defensa en Profundidad): Jamás confíes únicamente en ocultar botones con @can en la vista. La protección debe revalidarse estrictamente en las rutas HTTP con middlewares y en los controladores.
  2. 🧩 Consistencia de Nombres en Permisos: Mantén una convención uniforme para nombrar los permisos en el Seeder y las directivas Blade (ej. 'Ver doctores', 'editar tratamientos', 'guarda tratamientos').
  3. 👁️ Optimización de UX / UI: Ocultar elementos inalcanzables previene la frustración del usuario, evitando que interactúe con controles que derivarían en un error 403 Forbidden.
  4. 🧹 Mantenimiento de Plantillas Base: Centralizar la lógica de autorización en componentes parciales o en el layout principal para evitar duplicación de código en el menú de navegación.