Skip to content

Permisos y Control de Acceso

Zentto implementa un sistema de control de acceso basado en roles (RBAC) que permite configurar permisos granulares por modulo, accion, rol y usuario.

ConceptoDescripcion
PermisoAutorizacion para realizar una accion en un modulo (ej: ventas.CREATE)
RolAgrupacion de permisos (ej: “Vendedor”, “Administrador”)
OverrideExcepcion de permiso para un usuario especifico
Restriccion de precioLimites de descuento y credito por rol/usuario
Regla de aprobacionCondiciones que activan un flujo de aprobacion

El catalogo base incluye 120 permisos (15 modulos x 8 acciones):

CodigoModuloDescripcion
ventasVentasFacturas, notas, cotizaciones, pedidos, CxC
comprasComprasOrdenes de compra, recepciones, CxP
inventarioInventarioProductos, stock, almacenes, movimientos
bancosBancosCuentas bancarias, movimientos, conciliacion
contabilidadContabilidadPlan de cuentas, asientos, reportes
nominaNominaProcesamiento de nomina, recibos
rrhhRRHHEmpleados, beneficios, vacaciones
posPOSPunto de venta, sesiones, cierres
restauranteRestauranteMesas, ordenes, recetas
auditoriaAuditoriaLogs de auditoria, trazabilidad
crmCRMLeads, pipeline, call center
manufacturaManufacturaBOM, ordenes de produccion
flotaFlotaVehiculos, mantenimiento, viajes
logisticaLogisticaRecepciones, despachos, devoluciones
permisosPermisosAdministracion de roles y permisos
CodigoAccionDescripcion
VIEWVerConsultar y listar registros
CREATECrearCrear nuevos registros
EDITEditarModificar registros existentes
DELETEEliminarEliminar registros
VOIDAnularAnular documentos
APPROVEAprobarAprobar documentos y solicitudes
EXPORTExportarExportar datos a Excel/PDF
ADMINAdministrarConfiguracion avanzada del modulo
PermisoPermite
ventas.VIEWVer listado de facturas y documentos de venta
ventas.CREATECrear nuevas facturas, cotizaciones, pedidos
ventas.VOIDAnular facturas emitidas
inventario.EDITModificar datos de productos
contabilidad.APPROVEAprobar asientos contables
permisos.ADMINGestionar roles y permisos del sistema
  1. Ir a Administracion > Roles
  2. Crear nuevo rol con nombre descriptivo
  3. Asignar permisos individuales o en bloque
RolPermisos tipicos
AdministradorTodos (admin flag)
Vendedorventas.VIEW, ventas.CREATE, inventario.VIEW, clientes.VIEW
Compradorcompras.VIEW, compras.CREATE, inventario.VIEW, proveedores.VIEW
Contadorcontabilidad.*, bancos.VIEW, ventas.VIEW, compras.VIEW
Cajero POSpos.VIEW, pos.CREATE, inventario.VIEW
Meserorestaurante.VIEW, restaurante.CREATE
RRHHrrhh., nomina.VIEW, empleados.
SupervisorTodos los VIEW + APPROVE de su area
Auditorauditoria.VIEW, todos los VIEW de modulos

Para asignar multiples permisos a un rol de una sola vez:

POST /v1/permisos/roles/:roleId/permisos/bulk
{
"permissions": [
{ "permissionId": 1, "isGranted": true },
{ "permissionId": 2, "isGranted": true },
{ "permissionId": 3, "isGranted": false },
{ "permissionId": 4, "isGranted": true }
]
}

Los permisos pueden restringirse por sucursal. Un vendedor puede tener permiso de crear facturas solo en la sucursal A pero no en la B:

POST /v1/permisos/roles/:roleId/permisos
{
"permissionId": 2,
"branchId": 1,
"isGranted": true
}

Si branchId es null, el permiso aplica a todas las sucursales.

Los overrides permiten dar o quitar un permiso a un usuario especifico, independientemente de su rol.

  • Un vendedor senior necesita poder anular facturas (su rol no lo permite)
  • Un empleado en periodo de prueba no debe poder exportar datos (su rol si lo permite)
POST /v1/permisos/usuarios/:userId/permisos/override
{
"permissionId": 5,
"isGranted": true
}
1. Usuario admin --> PERMITIR (siempre)
2. Override de usuario --> usar valor del override
3. Permiso del rol --> usar valor del rol
4. Sin configuracion --> PERMITIR (graceful degradation)
GET /v1/permisos/usuarios/:userId/verificar/ventas.VOID

Respuesta:

{
"hasPermission": true,
"source": "override",
"permissionCode": "ventas.VOID"
}

Limitan lo que un vendedor puede hacer en terminos de descuentos y credito.

CampoDescripcionEjemplo
maxDiscountPercentDescuento maximo permitido15%
minPricePercentPrecio minimo como % del precio lista85%
maxCreditLimitLimite de credito maximo otorgable$50,000
requiresApprovalAboveMonto que requiere aprobacion$10,000

Las restricciones se asignan por rol o por usuario:

POST /v1/permisos/precios
{
"roleId": 3,
"maxDiscountPercent": 15,
"minPricePercent": 85,
"maxCreditLimit": 50000,
"requiresApprovalAbove": 10000
}

Cuando un vendedor aplica un descuento o modifica el precio:

  1. Frontend consulta /v1/permisos/precios/verificar/:userId
  2. Compara el descuento aplicado vs. maxDiscountPercent
  3. Si excede el limite:
    • Bloquea la accion, o
    • Solicita aprobacion del supervisor
Vendedor aplica 20% de descuento
--> Restriccion: maxDiscountPercent = 15%
--> 20% > 15% --> Bloquear
--> Opcion: crear solicitud de aprobacion al supervisor

Definen cuando una operacion requiere aprobacion de un supervisor.

CampoDescripcion
moduleCodeModulo (ej: ventas, compras)
documentTypeTipo de documento (ej: FACTURA, ORDEN_COMPRA)
minAmountMonto minimo que activa la regla
maxAmountMonto maximo (opcional)
requiredRoleIdRol que puede aprobar
approvalLevelsNumero de niveles de aprobacion
isActiveRegla activa/inactiva
POST /v1/permisos/reglas-aprobacion
{
"moduleCode": "compras",
"documentType": "ORDEN_COMPRA",
"minAmount": 5000,
"requiredRoleId": 2,
"approvalLevels": 1,
"isActive": true
}

Esta regla establece que toda orden de compra por mas de $5,000 requiere aprobacion de un usuario con rol ID 2.

Cuando una operacion activa una regla de aprobacion:

POST /v1/permisos/aprobaciones
{
"documentModule": "compras",
"documentType": "ORDEN_COMPRA",
"documentNumber": "OC-2026-0042",
"documentAmount": 7500
}
PENDING --> APPROVED
--> REJECTED
POST /v1/permisos/aprobaciones/:id/accion
{
"action": "APPROVE",
"comments": "Aprobado, proveedor verificado"
}

O rechazar:

{
"action": "REJECT",
"comments": "Cotizar con al menos 3 proveedores"
}
GET /v1/permisos/aprobaciones?status=PENDING&moduleCode=compras

Respuesta:

{
"rows": [
{
"approvalRequestId": 1,
"documentModule": "compras",
"documentType": "ORDEN_COMPRA",
"documentNumber": "OC-2026-0042",
"documentAmount": 7500,
"status": "PENDING",
"requestedBy": "vendedor01",
"requestedAt": "2026-03-22T10:30:00Z"
}
],
"totalCount": 1
}

Para poblar el catalogo de permisos por primera vez:

POST /v1/permisos/permisos/seed

Este endpoint genera los 120 permisos base (15 modulos x 8 acciones) si no existen.

El sistema RBAC usa graceful degradation:

  • Si las tablas de permisos no existen: permite todo
  • Si el SP de verificacion falla: permite todo
  • Si no hay permisos configurados: permite todo
  • Usuarios admin: siempre pasan sin verificacion

Esto permite desplegar el sistema sin necesidad de configurar permisos inmediatamente. Los permisos se activan gradualmente a medida que se configuran.

EndpointMetodoDescripcion
/v1/permisos/permisosGETCatalogo de permisos
/v1/permisos/permisos/seedPOSTInicializar catalogo
/v1/permisos/roles/:roleId/permisosGETPermisos de un rol
/v1/permisos/roles/:roleId/permisosPOSTAsignar permiso a rol
/v1/permisos/roles/:roleId/permisos/bulkPOSTAsignacion masiva
/v1/permisos/usuarios/:userId/permisosGETPermisos efectivos del usuario
/v1/permisos/usuarios/:userId/permisos/overridePOSTOverride de permiso
/v1/permisos/usuarios/:userId/verificar/:codeGETVerificar permiso
/v1/permisos/preciosGETListar restricciones de precio
/v1/permisos/preciosPOSTCrear/actualizar restriccion
/v1/permisos/precios/verificar/:userIdGETVerificar restriccion
/v1/permisos/reglas-aprobacionGETListar reglas de aprobacion
/v1/permisos/reglas-aprobacionPOSTCrear/actualizar regla
/v1/permisos/aprobacionesGETListar solicitudes
/v1/permisos/aprobacionesPOSTCrear solicitud
/v1/permisos/aprobaciones/:idGETDetalle de solicitud
/v1/permisos/aprobaciones/:id/accionPOSTAprobar o rechazar