Autenticacion y RBAC
Flujo de autenticacion
Section titled “Flujo de autenticacion”Login (desde el frontend)
Section titled “Login (desde el frontend)”- El usuario inicia sesion en la web via Zauru OAuth.
- El frontend recibe un
codede Zauru y lo valida con/api/userinfo. - El frontend envia
email,passwordyentity_idaPOST /api/auth/loginen BoostAPI. - BoostAPI verifica el password contra bcrypt en la tabla
users. - Se resuelven los permisos efectivos del usuario (ver RBAC abajo).
- Se devuelve un JWT con 8 horas de expiracion con el payload:
{ "id": 1, "email": "usuario@empresa.com", "zauru_user_id": 42, "role_id": 3, "role_name": "vendedor", "entity_id": 1, "employee_role_id": 5, "user_role_id": null, "role_source": "employee", "employee_id": 7, "zauru_employee_id": 100, "client_kind": "web"}- Se reconcilia la sesion Zauru del usuario (perfil, GraphQL JWT) y se almacenan credenciales cifradas.
Bootstrap de password (temporal)
Section titled “Bootstrap de password (temporal)”Durante rollout inicial, si AUTH_ALLOW_FIRST_LOGIN_PASSWORD_BOOTSTRAP=true, el primer login de un usuario puede establecer su password automaticamente validando contra la API key de Zauru.
Cambio de entidad
Section titled “Cambio de entidad”POST /api/auth/change-entity permite cambiar de empresa sin cerrar sesion. Devuelve un nuevo JWT con la entidad actualizada.
Sistema RBAC (Control de Acceso Basado en Roles)
Section titled “Sistema RBAC (Control de Acceso Basado en Roles)”Tres capas de suscripciones
Section titled “Tres capas de suscripciones”Los permisos se resuelven desde tres niveles de suscripcion, en orden de prioridad:
| Nivel | Busqueda | Descripcion |
|---|---|---|
| 1. Employee subscription | employee_id + entity_id |
Permisos del empleado en esta empresa |
| 2. User-entity subscription | user_id + entity_id |
Permisos del usuario en esta empresa |
| 3. User-global subscription | user_id + entity_id=NULL |
Permisos globales del usuario |
Resolucion de permisos
Section titled “Resolucion de permisos”- Si la suscripcion global tiene rol
super_admin, el usuario obtiene TODOS los permisos. - Si no, se combinan los permisos base del rol + overrides por suscripcion.
- Los overrides pueden ser
ALLOW(agregar permiso) oDENY(quitar permiso) por codigo. - Los permisos soportan implicaciones (ej:
leads.createimplicaleads.view).
Catalogo de permisos (44 codigos)
Section titled “Catalogo de permisos (44 codigos)”Organizados en 5 modulos:
Cartera (8 permisos)
cartera.leads_list.view– Ver lista de leadscartera.clients_list.view– Ver lista de clientescartera.lead_detail.view/.edit– Ver/editar detalle de leadcartera.client_detail.view/.edit– Ver/editar detalle de clientecartera.seller_assignment– Asignar vendedorcartera.export_excel– Exportar a Excel
Registros (15 permisos)
groups.view/.create/.editleads.view/.create/.editcontacts.view/.create/.editgroup_assignments.manage/lead_assignments.manage/contact_assignments.manageentity_channel_accounts.view/.create/.edit
Catalogo (5 permisos)
catalog.view– Ver catalogo de productoscatalog.seller_change– Cambiar vendedor en catalogoorders.view/.createquotes.view/.create
Configuracion (7 permisos)
custom_field_types.viewcustom_field_groups.view/.create/.editcustom_fields.view/.create/.edit
Administracion (5 permisos)
roles.view/.create/.editsubscriptions.view/.create/.editpermissions.catalog.viewcommunications.command_palette.view
Uso en controladores
Section titled “Uso en controladores”// Solo autenticacion (cualquier usuario logueado)@Authentication()
// Autenticacion + permiso especifico@Authentication('leads.create')
// Acceder al usuario en el handler@GetUser() user: JwtPayloadVerificacion en cada request
Section titled “Verificacion en cada request”El JWT Strategy re-resuelve los permisos desde la base de datos en cada request (no se cachean en el token). Esto garantiza que cambios de permisos se aplican inmediatamente.
Endpoints de auth
Section titled “Endpoints de auth”| Metodo | Ruta | Auth | Descripcion |
|---|---|---|---|
POST |
/api/auth/login |
No | Login con email + password + entity_id |
POST |
/api/auth/change-entity |
JWT | Cambiar entidad activa |
GET |
/api/auth/my-entities |
JWT | Listar entidades del usuario |
POST |
/api/auth/zauru-session/sync |
JWT | Forzar reconciliacion de sesion Zauru |
GET |
/api/auth/zauru-session |
JWT | Obtener snapshot de sesion Zauru |
DELETE |
/api/auth/zauru-session |
JWT | Limpiar sesion Zauru |
Endpoints de permisos
Section titled “Endpoints de permisos”| Metodo | Ruta | Auth | Descripcion |
|---|---|---|---|
GET |
/api/permissions/schema |
JWT | Schema completo de permisos (cacheable con ETag) |
GET |
/api/permissions/me |
JWT | Permisos efectivos del usuario actual |
GET |
/api/permissions |
permissions.catalog.view |
Registros de permisos en BD |
Referencia privada: Ver
BoostAPI/docs/auth-rbac-contract.mdyBoostAPI/docs/permissions-schema-and-grants.mdpara contratos detallados.
