import 'package:sysfarma_mobile/src/core/models/tenant_session.dart'; /// Mapeo pantalla movil -> modulo web (mismos `value` de la tabla `modules` /// que ya usa el sidebar, ej. `sidebar.blade.php`: `in_array('items', /// $vc_modules)`). Una ruta con requisito satisface si el usuario tiene /// AL MENOS UNO de los modulos listados. /// /// Rutas que no aparecen aca (home, perfil, pendientes sync, more, scanner, /// stocktake) quedan sin restriccion de modulo a proposito: son utilidades /// propias del movil sin equivalente 1:1 en el catalogo de modulos web, o /// pantallas de cuenta que todo usuario logueado necesita. class ModuleAccess { const ModuleAccess._(); static const Map> routeModules = { '/sales': ['pos', 'documents'], '/sales-history': ['documents'], '/pending-voided': ['documents'], '/quick': ['documents'], '/inventory': ['inventory'], '/catalog': ['items'], '/services': ['items'], '/customers': ['persons'], // Proveedores cuelga del modulo Compras en la web (sidebar.blade.php: // "Proveedores" vive bajo el bloque `purchases`, gateado por el nivel // `purchases_suppliers`), no de Clientes/persons pese a compartir la // misma pantalla web (PersonsController con type=suppliers). '/suppliers': ['purchases'], '/purchases': ['purchases'], '/reports': ['reports'], }; /// true si `path` no tiene requisito de modulo, o si la sesion tiene alguno /// de los modulos requeridos para ese prefijo de ruta. static bool routeAllowed(String path, TenantSession session) { for (final entry in routeModules.entries) { if (path == entry.key || path.startsWith('${entry.key}/')) { return entry.value.any(session.hasModule); } } return true; } }