Skip to content

Permisos RBAC

Permisos RBAC

NeoPOS implementa un sistema de control de acceso basado en roles (RBAC). Cada usuario tiene un rol, y cada rol tiene permisos CRUD (leer, crear, actualizar, eliminar) sobre módulos específicos dentro de su tenant.

Roles

RolIDDescripción
Administrador1Admin del tenant — puede gestionar usuarios y permisos de su tenant
Asistente2Acceso limitado a ventas, productos, clientes
Superadmin3Cross-tenant — gestión de todos los tenants (solo operaciones de infraestructura)

Módulos vs Roles

Cada módulo define qué acciones puede realizar cada rol. Los permisos se almacenan en la tabla permisos_rol y se verifican en cada endpoint.

MóduloLeerCrearActualizarEliminar
ventas
productos
categorias
clientes
proveedores
caja
egresos
impuestos
jornadas
saldo_inicial
cotizaciones
creditos
usuarios
configuracion
logs
dashboard
reportes
permisos
tenants

Nota: El Superadmin (rol=3) tiene acceso a todos los módulos sin restricción. El Asistente (rol=2) solo tiene permisos específicos según la configuración del tenant.

Cómo consultar permisos del usuario

Cada vez que un usuario se autentica, la respuesta de login incluye su objeto usuario con rol y tenant_id. Para consultar los permisos específicos de su rol:

Terminal window
curl "http://localhost/api/permisos-rol?id_tipo_usuario=2" \
-H "Authorization: Bearer <token>"

Respuesta:

{
"data": [
{
"modulo": "ventas",
"permiso_crear": true,
"permiso_leer": true,
"permiso_actualizar": true,
"permiso_eliminar": false
}
]
}

Jerarquía de verificación

  1. El endpoint recibe el token JWT → extrae tenant_id, rol, user_id
  2. Si el rol es Superadmin (3) → acceso concedido sin verificar permisos
  3. Si no → consulta permisos_rol para el tenant y rol actual
  4. Verifica el permiso específico (permiso_leer, permiso_crear, etc.)
  5. Si no tiene permiso → responde 403 Forbidden

Cómo gestionar permisos

Los administradores de tenant pueden gestionar permisos mediante el endpoint /api/permisos-rol. Para reemplazar todos los permisos de un rol de una sola vez:

Terminal window
curl -X PUT "http://localhost/api/permisos-rol/upsert/2" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"permisos": [{"modulo": "ventas", "permiso_crear": false, "permiso_leer": true, "permiso_actualizar": false, "permiso_eliminar": false}]}'

Para más detalles, consulta la referencia de endpoints de permisos.