diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index b1abb15..5e8dcf7 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -41,6 +41,29 @@ function AdminRoute({ children }: { children: React.ReactNode }) { return <>{children}>; } +function AnalystRoute({ children }: { children: React.ReactNode }) { + const { isAdmin, isAnalista } = useAuth(); + + if (!isAdmin && !isAnalista) { + return ; + } + + return <>{children}>; +} + +// Componente para redirigir a la página correcta según el rol +function HomeRedirect() { + const { user, isCliente, isEmpleado } = useAuth(); + + // Si es cliente o empleado, redirigir a su empresa + if ((isCliente || isEmpleado) && user?.cliente_id) { + return ; + } + + // Si es admin o analista, ir a lista de clientes + return ; +} + function AppRoutes() { const { user, loading } = useAuth(); @@ -68,13 +91,24 @@ function AppRoutes() { } > - } /> - } /> + } /> + + {/* Lista de clientes - solo admin/analista */} + + + + } + /> + + {/* Detalle de cliente - todos pueden ver (con restricciones en backend) */} } /> } /> } /> - {/* Rutas de administración */} + {/* Rutas de administración - solo admin */} } /> } /> } /> diff --git a/frontend/src/components/layout/Sidebar.tsx b/frontend/src/components/layout/Sidebar.tsx index 5a8e0e6..83b36aa 100644 --- a/frontend/src/components/layout/Sidebar.tsx +++ b/frontend/src/components/layout/Sidebar.tsx @@ -2,11 +2,6 @@ import { NavLink } from 'react-router-dom'; import { useAuth } from '../../context/AuthContext'; import clsx from 'clsx'; -const navItems = [ - { name: 'Clientes', path: '/clientes', icon: '🏢', roles: ['admin', 'analista'] }, - { name: 'Mi Empresa', path: '/clientes', icon: '📊', roles: ['cliente', 'empleado'] }, -]; - const adminItems = [ { name: 'Usuarios', path: '/admin/usuarios', icon: '👥' }, { name: 'Giros', path: '/admin/giros', icon: '🏷️' }, @@ -15,11 +10,27 @@ const adminItems = [ ]; export default function Sidebar() { - const { user, isAdmin } = useAuth(); + const { user, isAdmin, isAnalista, isCliente, isEmpleado } = useAuth(); - const filteredNavItems = navItems.filter( - (item) => item.roles.includes(user?.role || '') - ); + // Determinar navegación principal según rol + const getMainNavItems = () => { + if (isAdmin || isAnalista) { + return [ + { name: 'Clientes', path: '/clientes', icon: '🏢' }, + ]; + } + + if ((isCliente || isEmpleado) && user?.cliente_id) { + return [ + { name: 'Mi Empresa', path: `/clientes/${user.cliente_id}`, icon: '🏢' }, + { name: 'Dashboard', path: `/clientes/${user.cliente_id}`, icon: '📊' }, + ]; + } + + return []; + }; + + const mainNavItems = getMainNavItems(); return (