08 — Roles y Permisos
Documento de referencia para administradores y dueños de restaurante
Sistema:
ZEUMAX(ZEUMAX)
Versión: Guía de configuración de accesos, autenticación y seguridad
1. Introducción
Roles y Permisos define quién puede acceder a qué parte del sistema y qué puede hacer una vez dentro. En un restaurante moderno operan simultáneamente múltiples perfiles: clientes que hacen pedidos desde sus teléfonos, repartidores que recorren la ciudad con el GPS activo, cocineros que gestionan la preparación en tiempo real, cajeros que cobran en la caja registradora digital, managers que supervisan la operación y admins que configuran cada detalle del negocio.
ZEUMAX utiliza un sistema de autenticación múltiple (múltiples guards del backend) y autorización granular (permisos por módulo y por rol) para garantizar que cada usuario vea únicamente lo que necesita y nada más. Este documento es la guía de referencia completa para que un administrador pueda configurar, auditar y mantener los accesos de todo su equipo sin cometer errores de seguridad.
Regla de oro: Si un empleado no necesita ver algo para hacer su trabajo, no debe tener permiso para verlo.
2. Tabla Maestra de Roles del Sistema
La siguiente tabla resume todos los roles operativos del ecosistema ZEUMAX, qué guard de autenticación utilizan, en qué aplicaciones operan, cómo inician sesión, qué acciones pueden realizar y qué límites tienen explícitamente.
| Rol | Guard | App(s) | Login | Qué puede hacer | Qué NO puede hacer |
|---|---|---|---|---|---|
| Cliente | auth:api |
Web Cliente (costumer-web), App QR | Email + password, Teléfono + OTP, Firebase social, o Guest checkout | Hacer pedidos online, ver historial, pagar con wallet/tarjeta, dejar reviews, usar chat de soporte, escanear QR de mesa | Ver datos internos del restaurante, acceder a paneles de admin, modificar productos, ver precios de costo |
| Repartidor | auth:api |
Hotpack Rider (App de delivery) | Email + password o Teléfono + OTP | Recibir pedidos asignados, ver ruta GPS, marcar entrega, actualizar estado, cobrar en efectivo (si aplica), ver historial de entregas | Aceptar pedidos directamente del sistema, editar menú, ver cocina, cobrar en TPV, acceder a estadísticas del negocio |
| Cocinero | auth:kitchen_api |
Kitchen App | Credenciales especiales (email + password o PIN) | Ver pedidos entrantes filtrados por sucursal, cambiar estados de preparación (pendiente → en cocina → listo), filtrar por tipo de pedido, marcar prioridad | Cobrar pedidos, gestionar repartidores, editar productos o menú, ver precios, acceder a estadísticas |
| Manager / Recepcionista | auth:manager_api |
Orden Receiver | Email + PIN de 4 dígitos | Recibir pedidos, aceptar/rechazar órdenes, gestionar cocina, asignar repartidores, chat interno con clientes, ver estadísticas básicas (si tiene permiso), gestionar empleados (si tiene permiso), imprimir tickets | Configurar precios de productos, crear cupones, ver pagos del sistema, acceder a sucursales ajenas, modificar integraciones externas |
| Cajero / TPV User | auth:tpv_api |
TPV (Terminal Punto de Venta) | PIN de acceso rápido | Abrir caja, crear pedidos presenciales, cobrar (efectivo, tarjeta, wallet), gestionar mesas, dividir cuentas, aplicar descuentos (si el perfil lo permite), ver productos del menú, gestionar stock básico (si aplica) | Configurar menú, crear productos, ver reportes financieros globales, gestionar sucursales, acceder a integraciones externas |
| Admin / Superadmin | admin |
Panel Admin Web | Email + password | Todo. Configurar productos, menús, sucursales, usuarios, empleados, repartidores, pagos, integraciones (Sinqro, AEAT, Shipday), banners, cupones, notificaciones push, estadísticas avanzadas, wallet, logs de actividad, modo mantenimiento | Ninguno relevante. Es el rol de máxima confianza. |
| Branch Manager | branch |
Panel Branch Web | Email + password + selección de sucursal | Ver y gestionar pedidos de su sucursal únicamente, operar POS/mesas, ver cocina de su branch, gestionar empleados locales, ver estadísticas de su sucursal | Ver datos de otras sucursales, crear sucursales nuevas, configurar productos globales, gestionar admins, modificar integraciones externas |
| Mesonero / Camarero | auth:api o auth:manager_api |
App Mesonero | Email + PIN o Email + password | Tomar pedidos en mesa, gestionar estados de mesas (libre, ocupada, reservada), enviar pedidos a cocina, ver menú de productos, cobrar en mesa (si aplica) | Configurar menú, ver reportes de otras mesas, gestionar repartidores, acceder a configuración del sistema |
Nota técnica: Cada columna Guard en la tabla anterior corresponde a un sistema de autenticación independiente en el backend. Esto significa que las credenciales de un Cliente no sirven para entrar al Panel Admin, ni el PIN de un Cajero sirve para el Orden Receiver. Están completamente aislados.
3. Matriz de Permisos por App
ZEUMAX no solo separa roles, sino que dentro de cada rol define permisos granulares. A continuación se detallan los permisos configurables por aplicación.
3.1 Orden Receiver (Manager) — Permisos RBAC
El middleware CheckManagerAccess controla qué botones y pantallas ve cada manager. Los permisos se asignan desde el Panel Admin Web en la sección Empleados → Manager Users.
| Permiso | Código interno | ¿Qué controla? |
|---|---|---|
| Ver pedidos | orders,view |
Acceder al listado de pedidos entrantes y su detalle |
| Editar pedidos | orders,edit |
Aceptar, rechazar, cancelar o modificar un pedido |
| Aceptar pedidos | orders,accept |
Botón específico "Aceptar pedido" (puede separarse de editar) |
| Ver menú | menu,view |
Ver la lista de productos y categorías |
| Editar menú | menu,edit |
Modificar productos, precios, disponibilidad, categorías |
| Ver delivery | delivery,view |
Ver listado de repartidores y pedidos en ruta |
| Asignar repartidor | delivery,assign |
Botón "Asignar repartidor" a un pedido listo |
| Ver empleados | employees,view |
Ver lista de empleados de su sucursal |
| Editar empleados | employees,edit |
Crear, modificar o desactivar empleados locales |
| Ver estadísticas | statistics,view |
Acceder a dashboards de ventas, productos top, horas pico |
| Gestionar impresoras | printer,manage |
Configurar impresoras de tickets, reimprimir, cambiar formato |
| Ver chat | chat,view |
Acceder al chat de soporte con clientes |
| Ver configuración | settings,view |
Ver ajustes de la sucursal (horarios, zonas de envío) |
| Editar configuración | settings,edit |
Modificar ajustes de la sucursal |
Cómo se configuran:
1. El Admin entra al Panel Admin Web.
2. Navega a Empleados → Manager Users.
3. Selecciona un manager existente o crea uno nuevo.
4. En la sección Permisos, marca o desmarca los checkboxes correspondientes.
5. Guarda los cambios. El manager deberá cerrar sesión y volver a entrar para que los cambios se apliquen completamente (aunque la mayoría se refrescan en caliente).
Tip práctico: Crea un perfil tipo "Recepcionista básico" con solo
orders,view,orders,accept,chat,viewy otro perfil "Manager de turno" con todos los permisos exceptosettings,edit.
3.2 TPV — Perfiles de Permisos (TpvProfile)
Los usuarios TPV no tienen permisos individuales sueltos, sino que se agrupan en perfiles (tpv_profiles). Un perfil define un conjunto de capacidades y se asigna a uno o varios cajeros.
| Perfil de ejemplo | Capacidades típicas | Ideal para |
|---|---|---|
| Cajero básico | Crear pedidos, cobrar (todos los métodos), ver menú, gestionar mesas básico | Personal nuevo, turnos de baja complejidad |
| Cajero avanzado | Todo lo anterior + aplicar descuentos manuales, cancelar items, dividir cuentas, reimprimir tickets | Personal con experiencia, turnos congreso |
| Jefe de caja | Todo lo anterior + apertura/cierre de caja, ver informe de ventas del turno, gestionar sesiones de caja, ver arqueos, modificar productos del menú rápido | Supervisor del turno, encargado de caja |
Cómo se configuran los perfiles TPV:
1. Desde el Panel Admin Web, ir a Configuración → TPV → Perfiles TPV.
2. Crear un nuevo perfil: asignar nombre y descripción.
3. Marcar las capacidades habilitadas para ese perfil (checkboxes por función).
4. Guardar el perfil.
5. Ir a Empleados → TPV Users y asignar el perfil deseado a cada cajero.
Importante: Si el feature flag
tpv_users_enabledestá desactivado enBusinessSetting, la sección TPV completa estará inaccesible para todos los usuarios. El middlewareCheckTpvFeatureprotege esta funcionalidad.
3.3 Panel Admin — Roles Custom (admin_roles)
El sistema permite crear roles personalizados para los usuarios del Panel Admin Web. Esto es útil cuando el dueño del restaurante quiere que el equipo de marketing o finanzas acceda solo a sus áreas, sin poder tocar productos o sucursales.
| Rol de ejemplo | Módulos permitidos | Ideal para |
|---|---|---|
| Superadmin | Todos los módulos: productos, sucursales, usuarios, pedidos, pagos, integraciones, estadísticas, mantenimiento, configuración global | Dueño, CTO, director de operaciones |
| Marketing | Banners, cupones, notificaciones push, categorías de productos (solo visibilidad), reviews de clientes | Equipo de marketing digital |
| Finanzas | Pagos, reportes de ventas, wallet, transacciones, facturación (AEAT si aplica), arqueos de caja | Contador, equipo financiero |
| Soporte / Atención | Pedidos, chat con clientes, usuarios finales, reclamos, devoluciones, reimpresión de tickets | Equipo de customer service |
Cómo se crean roles Admin:
1. En el Panel Admin Web, ir a Configuración → Roles y Permisos → Admin Roles.
2. Pulsar Crear nuevo rol.
3. Indicar nombre (ej: "Marketing") y descripción.
4. Seleccionar los módulos permitidos desde una lista de checkboxes agrupados por categoría.
5. Guardar el rol.
6. Asignar el rol al crear o editar un usuario Admin en Administradores → Usuarios Admin.
Nota de seguridad: El rol Superadmin no puede eliminarse ni restringirse. Existe al menos un Superadmin con acceso total para evitar bloqueos del sistema.
3.4 Panel Branch — Aislamiento por Sucursal (BranchAdder)
Los usuarios del Panel Branch tienen un funcionamiento especial: el middleware BranchAdder inyecta automáticamente el branch_id de su sucursal asignada en cada petición que hacen al backend. Esto significa:
- No necesitan seleccionar sucursal en cada pantalla. El sistema ya sabe de qué branch provienen.
- No pueden ver datos de otras sucursales. Aunque intenten manipular el
branch_idmanualmente, el middleware lo sobrescribe con su valor asignado. - El backend filtra automáticamente. Todas las consultas a pedidos, productos, empleados, mesas y estadísticas se filtran por ese
branch_id.
| Área | Acceso | Restricción |
|---|---|---|
| Pedidos | Solo los de su sucursal | No ve pedidos de otras sucursales |
| POS / Mesas | Solo mesas de su sucursal | No puede operar mesas de otra branch |
| Cocina | Solo pedidos de su kitchen | No interviene en cocinas externas |
| Empleados | Solo empleados locales | No gestiona admins ni managers de otras branches |
| Estadísticas | Solo datos de su branch | No ve reportes consolidados (a menos que el Admin se los comparta) |
4. Cómo Crear y Gestionar Usuarios
Esta sección es el paso a paso práctico para un administrador que necesita dar de alta a un nuevo empleado.
4.1 Crear un Manager / Recepcionista
- Entra al Panel Admin Web con tu cuenta Superadmin.
- Ve al menú lateral: Empleados → Manager Users.
- Pulsa el botón "Nuevo Manager".
- Completa el formulario:
- Nombre completo: obligatorio.
- Email: obligatorio, usado para login y recuperación.
- Teléfono: opcional, pero recomendado para OTP.
- PIN de 4 dígitos: código numérico para acceso rápido en Orden Receiver.
- Rol: selecciona el rol base (esto no reemplaza los permisos granulares).
- Sucursal asignada: selecciona la branch a la que pertenecerá.
- Permisos: marca cada checkbox granular (
orders,view,orders,edit,menu,view, etc.). - Pulsa Guardar. El sistema enviará un email de bienvenida con instrucciones.
4.2 Crear un Perfil TPV y Asignarlo
- En el Panel Admin Web, ve a Configuración → TPV → Perfiles TPV.
- Pulsa "Nuevo Perfil".
- Asigna nombre: ej. "Cajero Turno Mañana".
- Selecciona capacidades del listado:
- Crear pedido
- Cobrar
- Aplicar descuento /
- Cancelar ítem /
- Dividir cuenta /
- Apertura/cierre de caja /
- Ver informes de turno /
- Guarda el perfil.
- Ve a Empleados → TPV Users → Nuevo TPV User.
- Completa: nombre, PIN, sucursal.
- En el campo Perfil, selecciona el perfil que acabas de crear.
- Guarda.
4.3 Crear un Rol Admin Custom
- Ve a Configuración → Roles y Permisos → Admin Roles.
- Pulsa "Nuevo Rol Admin".
- Nombre: ej. "Soporte Nivel 1".
- Descripción: ej. "Solo pedidos, chat y clientes. Sin acceso a finanzas ni configuración."
- Marca los módulos permitidos en el árbol de permisos:
- Pedidos
- Chat
- Clientes
- Productos
- Pagos
- Configuración
- Guarda.
- Al crear un nuevo usuario Admin, selecciona este rol en el desplegable.
4.4 Activar / Desactivar un Usuario
En cualquier tabla de usuarios (Manager Users, TPV Users, Admins, Delivery Men), verás una columna Estado con un toggle switch:
- Activo (verde): el usuario puede iniciar sesión y operar normalmente.
- Inactivo (gris): el usuario queda bloqueado. No puede loguearse, pero su historial de actividad (pedidos que aceptó, ventas que cobró, chat que tuvo) se preserva intacto para auditoría.
No borres, desactiva. Eliminar un usuario elimina su historial de asociación. Desactivarlo conserva la trazabilidad de quién hizo qué.
4.5 Resetear PIN
Si un cajero o manager olvida su PIN:
- Busca al usuario en su tabla correspondiente.
- Pulsa el botón de menú (⋮) y selecciona "Resetear PIN".
- El sistema genera un PIN aleatorio nuevo.
- Puedes enviarlo por:
- Email: el usuario recibe el PIN en su correo registrado.
- SMS: el usuario recibe el PIN por mensaje de texto (si tiene teléfono configurado).
- Se recomienda que el usuario cambie el PIN en su primer login.
5. Flujo de Autenticación por Tipo de Usuario
Cada perfil de usuario tiene un flujo de inicio de sesión distinto. Entenderlos ayuda a diagnosticar problemas de acceso y a capacitar al personal correctamente.
5.1 Cliente
- El cliente abre la Web Cliente o escanea el QR de mesa.
- Se presentan las opciones de login configuradas por el Admin en
LoginSetup: - Email + contraseña
- Teléfono + código OTP
- Firebase (Google, Apple, Facebook)
- Continuar como invitado (Guest) — el sistema genera un
Guest IDautomático. - Tras autenticarse, el backend emite un token JWT.
- El token se almacena en cookies del navegador (o en Redux si es PWA).
- El token expira tras el tiempo configurado (horas). El cliente debe volver a autenticarse o refrescar el token.
Nota: Los clientes Guest pueden hacer pedidos, pero para funciones como Wallet, guardar direcciones favoritas o dejar reviews, el sistema puede requerir que completen el registro completo.
5.2 Repartidor
- Abre la app Hotpack Rider.
- En la pantalla de login, introduce:
- Email + password, o
- Teléfono + código OTP (configurable por el Admin).
- El sistema valida contra el guard
auth:api. - Recibe un token para la API.
- El repartidor debe estar activo (
deliveryman_is_active). Si fue desactivado por el Admin, verá un mensaje de "Cuenta suspendida". - Mientras está online, el GPS se activa en segundo plano para permitir el tracking de entregas en tiempo real.
- Solo recibe pedidos asignados por un Manager o por el sistema automático.
5.3 Cocinero
- Abre la Kitchen App en la tablet o pantalla de cocina.
- Inicia sesión con credenciales especiales: email + password o credencial rápida (si el Admin la configuró).
- El sistema usa el guard
auth:kitchen_api. - El backend filtra automáticamente los pedidos para mostrar solo los de la sucursal asignada al cocinero (vía relación
chef_branches). - El cocinero ve el flujo de pedidos y puede cambiar estados: Pendiente → En preparación → Listo para entrega.
- No puede salir de la app de cocina ni ver otras secciones del sistema.
5.4 Manager (Orden Receiver)
- Abre la app Orden Receiver en PC o tablet.
- En la pantalla de login, introduce su email y su PIN de 4 dígitos.
- El sistema valida contra el guard
auth:manager_api. - Tras el login, el middleware
CheckManagerAccessevalúa su lista de permisos y oculta los botones que no puede usar. - Ejemplo: Si no tiene
orders,accept, el botón "Aceptar pedido" no aparece. - Ejemplo: Si no tiene
settings,edit, la pestaña de configuración está oculta. - El manager opera únicamente dentro de los límites de su sucursal asignada.
5.5 Cajero (TPV)
- Abre la app TPV en el dispositivo de caja (tablet, PC táctil o caja registradora digital).
- Inicia sesión con su PIN de acceso rápido.
- El sistema valida contra el guard
auth:tpv_api. - El middleware
CheckTpvFeatureverifica que el TPV esté habilitado a nivel global (tpv_users_enabled). Si no, muestra "TPV no disponible". - El middleware
CheckTpvFeaturetambién verifica qué módulos del TPV están activos (mesas, delivery, stock, etc.) y oculta los que no apliquen. - El cajero opera según su perfil (
TpvProfile). Si su perfil no permite descuentos, el botón de descuento no aparece o está deshabilitado.
5.6 Admin / Superadmin
- Abre el Panel Admin Web en un navegador.
- Introduce email + password.
- El sistema valida contra el guard
admin. - Se crea una sesión web con cookies de sesión.
- El Admin tiene acceso a todo el menú lateral del panel.
- Si se creó un rol Admin custom (ej: "Marketing"), el menú se filtra para mostrar solo los módulos permitidos.
5.7 Branch Manager
- Abre el Panel Branch Web en un navegador.
- Introduce email + password.
- Selecciona su sucursal de un desplegable (si tiene más de una asignada, o se autoselecciona si solo tiene una).
- El guard
branchvalida sus credenciales y su vínculo con la sucursal. - El middleware
BranchAdderinyecta elbranch_iden cada petición posterior. - El usuario ve solo datos, pedidos, mesas y empleados de esa sucursal.
6. Middlewares y Seguridad Explícita
Los middlewares son como guardias de seguridad que revisan cada petición antes de dejarla pasar. A continuación se explica cada uno en lenguaje humano:
| Middleware | ¿Qué hace? | Ejemplo práctico |
|---|---|---|
admin |
Revisa que el usuario sea un Admin del Panel Web. Si no, bloquea la entrada. | Un cliente intenta entrar a /admin/dashboard → bloqueado. |
branch / branch_status / branch_access |
Revisa que el usuario sea un Branch Manager y que su sucursal esté activa. | Un manager de Branch A intenta ver datos de Branch B → bloqueado por BranchAdder. |
auth:api |
Revisa que el token JWT pertenezca a un cliente o repartidor válido. | Un TPV intenta usar una API de clientes → bloqueado. |
auth:kitchen_api |
Revisa que el token sea de un cocinero válido. | Un manager intenta entrar a la API de cocina → bloqueado. |
auth:manager_api |
Revisa que el token sea de un Manager/Recepcionista válido. | Un cliente intenta usar el Orden Receiver → bloqueado. |
auth:tpv_api |
Revisa que el token sea de un usuario TPV válido. | Un admin intenta usar la API del TPV → bloqueado. |
CheckManagerAccess |
Revisa que el manager tenga el permiso específico para la acción que intenta. | Un manager sin orders,edit intenta aceptar un pedido → el botón ni siquiera se muestra; si hackea la petición, el backend la rechaza. |
CheckTpvFeature |
Revisa que el módulo TPV esté activado globalmente. | El admin desactivó TPV → todos los cajeros ven "Servicio no disponible". |
app_activate |
Revisa que la app externa esté comprada/activada por su software_id. |
El admin no compró la app de cocina (kitchen_app) → el enlace a Kitchen App no aparece en el menú. |
deliveryman_is_active |
Revisa que el repartidor no esté desactivado. | El admin suspendió a un repartidor → no recibe nuevos pedidos, solo ve "Cuenta inactiva". |
module:* |
Revisa que el usuario Admin tenga permiso para ese módulo específico. | Un Admin con rol "Marketing" intenta acceder a pagos → bloqueado. |
ExternalIntegrationsAccess |
Protege los endpoints de integraciones externas (Sinqro, AEAT, Shipday). | Solo admins con permiso de integraciones pueden ver o modificar estas conexiones. |
MaintenanceModeMiddleware |
Revisa si el modo mantenimiento está activo. | Admin activa mantenimiento → clientes ven página de mantenimiento, solo admins pueden acceder al panel. |
El Middleware BranchAdder en detalle
Este middleware es clave para la multi-sucursal:
- Inyección automática: Cuando un Branch Manager o un empleado de sucursal hace una petición,
BranchAdderlee subranch_idasociado y lo añade automáticamente a los parámetros de la petición. - Backend blindado: Los controladores del backend usan ese
branch_idpara filtrar todas las queries. Ni siquiera el desarrollador del frontend necesita enviarlo manualmente. - Anti-manipulación: Si un usuario malintencionado intenta enviar un
branch_idfalso en la petición, el middleware lo sobrescribe con el valor real asignado en la base de datos.
Resultado: Un empleado de la sucursal "Downtown" nunca puede ver, editar ni borrar datos de la sucursal "Uptown", aunque sea intencional o accidental.
7. Configuración de Métodos de Login (LoginSetup)
El sistema permite que el Admin configure qué métodos de autenticación están disponibles para los clientes y, en parte, para los empleados. Esto se gestiona en el Panel Admin en la sección Configuración → Login y Autenticación.
Opciones configurables por el Admin
| Método | Descripción | ¿Para quién? |
|---|---|---|
| Email + Password | Login clásico. El cliente se registra con email y elige contraseña. | Clientes, Admins, Branch Managers |
| Teléfono + OTP | El cliente introduce su número, recibe un código de un solo uso por SMS, lo introduce y accede. | Clientes, Repartidores (opcional), Managers (opcional) |
| Firebase Social | Login con Google, Apple o Facebook vía Firebase Authentication. Rápido, sin contraseña. | Clientes principalmente |
| Guest Checkout | El cliente no se registra. El sistema genera un Guest ID automático y permite hacer el pedido. Requiere datos mínimos (nombre, teléfono) para la entrega. |
Clientes web |
| PIN | Código numérico de 4 dígitos (o la longitud configurada). Diseñado para acceso rápido en TPV y Orden Receiver. | TPV Users, Manager Users |
Configuración de OTP
El Admin puede ajustar:
- Duración del código: ¿Cuántos minutos es válido el OTP? (ej: 5 minutos, 10 minutos).
- Longitud del código: ¿4 dígitos, 6 dígitos?
- Vía de envío: ¿SMS, Email, o ambos?
- Intentos fallidos: ¿Cuántos intentos erróneos permitir antes de bloquear temporalmente?
Recomendación: Para mercados con buena cobertura SMS, usa OTP por teléfono. Para mercados donde el email es más confiable, activa OTP por email. Nunca desactives ambos a la vez si usas OTP.
Configuración de PIN
- Longitud: El Admin define cuántos dígitos tiene el PIN (generalmente 4).
- Requisitos: Puede exigir que el PIN no sea secuencial (ej: 1234) ni repetido (ej: 1111).
- Reseteo: Cuántas veces se puede resetear por hora/día para evitar abuso.
8. Verificación de Cuentas
ZEUMAX diferencia entre usuarios registrados y usuarios verificados. La verificación es un paso adicional que aumenta la confianza y desbloquea funciones sensibles.
Verificación de Email
- El cliente se registra con su email.
- El sistema envía un email de verificación con un link único.
- El cliente abre su bandeja de entrada y hace clic en el link.
- El sistema marca el email como verificado en la tabla
email_verifications. - El cliente ahora tiene acceso a funciones que requieren email verificado.
Verificación de Teléfono
- El cliente introduce su número de teléfono.
- El sistema envía un SMS con un código OTP.
- El cliente introduce el código en la app.
- El sistema valida contra la tabla
phone_verifications. - El teléfono queda verificado.
Diferencia entre verificado y no verificado
| Función | Email verificado | Teléfono verificado | Sin verificar |
|---|---|---|---|
| Hacer pedidos | (Guest) | ||
| Wallet / Recargar saldo | recomendado | o limitado | |
| Dejar reviews / rating | — | ||
| Chat de soporte avanzado | Solo chat básico | ||
| Guardar múltiples direcciones | |||
| Recibir notificaciones push | — | Limitado |
Nota: El Admin puede configurar qué funciones requieren verificación desde el Panel Admin. En algunos mercados, para cumplir normativa local, el teléfono verificado es obligatorio para delivery.
9. Modo Mantenimiento
El Modo Mantenimiento permite al Admin cerrar temporalmente el acceso público al sistema sin afectar las operaciones internas.
Cómo se activa
- El Admin entra al Panel Admin Web.
- Ve a Configuración → General → Modo Mantenimiento.
- Activa el toggle "Modo Mantenimiento".
- Opcionalmente, escribe un mensaje personalizado para los usuarios (ej: "Volvemos en 30 minutos con mejoras en el sistema").
Qué ocurre cuando está activo
| Tipo de usuario | Efecto |
|---|---|
| Clientes (Web) | Ven una página de mantenimiento estática. No pueden hacer pedidos, ver menú ni loguearse. |
| Clientes (App QR / Móvil) | Ven un modal o pantalla de mantenimiento. La app queda en modo solo-lectura o bloqueada. |
| Repartidores | La app Hotpack Rider puede mostrar el modal de mantenimiento. No reciben nuevos pedidos. |
| Admins / Superadmins | Siguen teniendo acceso total al Panel Admin Web. Pueden seguir gestionando productos, usuarios, configuraciones. |
| TPV / Cocina / Manager | Depende de la configuración. Generalmente pueden seguir operando si el Admin lo permite (modo mantenimiento parcial), pero no reciben nuevos pedidos online. |
Uso típico: Actualizar precios, cambiar estructura de categorías, migrar datos, aplicar hotfixes críticos, cambiar integraciones de pago.
10. Buenas Prácticas de Seguridad
La seguridad del sistema no depende solo del software, sino de los hábitos del equipo. Estas son las recomendaciones oficiales para administradores y dueños de restaurante:
10.1 No compartir PINs
- Cada empleado debe tener su propio PIN.
- El PIN es personal e intransferible.
- Si un compañero necesita cubrir un turno, el Admin debe crearle un usuario propio o reasignar temporalmente.
10.2 Cerrar sesión al final del turno
- Todos los usuarios (especialmente TPV y Manager) deben cerrar sesión antes de irse.
- No dejar la app TPV abierta con un cajero logueado si otro empleado va a usar el dispositivo.
10.3 Cambiar PIN periódicamente
- Se recomienda forzar el cambio de PIN cada 30-90 días para usuarios de TPV y Manager.
- El Admin puede resetear masivamente los PINs desde el Panel Admin si sospecha de una filtración.
10.4 Desactivar, no borrar
- Cuando un empleado deja de trabajar, desactívalo (toggle de estado), no lo elimines.
- Razón: el historial de actividad (quién cobró qué, quién aceptó qué pedido) queda ligado a ese usuario. Borrarlo rompe la trazabilidad.
10.5 Revisar logs de actividad
- El Panel Admin tiene una sección de Logs / Auditoría donde se registra:
- Quién aceptó un pedido y a qué hora.
- Quién cobró una venta, con qué método y monto.
- Quién modificó un producto o precio.
- Quién asignó un repartidor.
- Quién desactivó a un usuario.
- Revisa estos logs al menos semanalmente para detectar comportamientos anómalos.
10.6 Principio de mínimo privilegio
- Nunca des permisos "por si acaso".
- Un recepcionista nuevo no necesita
settings,editniemployees,edit. - Un cajero de medio tiempo no necesita perfil de "Jefe de caja".
- Asigna el rol más restrictivo que permita hacer el trabajo. Es más fácil subir permisos luego que bajarlos después de un incidente.
10.7 Auditar roles Admin custom
- Si creaste roles como "Marketing" o "Soporte", revísalos cada 3 meses.
- Asegúrate de que no tengan acceso a módulos que no les corresponden por error de configuración.
- El Superadmin debe revisar quién tiene rol Superadmin. Limita este rol al mínimo indispensable (idealmente 1-2 personas).
11. Glosario Rápido de Términos
| Término | Significado |
|---|---|
| Guard | Sistema de autenticación separado. Cada tabla de usuarios (clientes, admins, TPV) tiene su propio guard. |
| Middleware | Capa de software que intercepta cada petición y decide si deja pasar o bloquea. |
| RBAC | Role-Based Access Control. Control de acceso basado en roles (y permisos dentro de cada rol). |
| Feature Flag | Interruptor que activa/desactiva una funcionalidad completa (ej: TPV, Kitchen App). |
| OTP | One-Time Password. Código de un solo uso enviado por SMS o email. |
| PIN | Personal Identification Number. Código numérico corto para login rápido en TPV y Manager. |
| JWT | JSON Web Token. Token firmado digitalmente que identifica al usuario en la API. |
| Branch | Sucursal física del restaurante. Cada branch tiene datos aislados. |
| Guest ID | Identificador temporal para clientes que no se registran. |
| Software ID | Identificador interno de una app externa (ej: table_app, kitchen_app) usado para activar/desactivar por módulo. |
Fin del documento 08 — Roles y Permisos
Para dudas sobre configuración específica, consulte el documento 05-configuracion-inicial.md o contacte al soporte técnico de ZEUMAX.