Skip to content

Sistema de Permisos de Backend (Backend Authorization System)

Modulo: Core / Configuracion Tipo: Process Estado: Planificado Fecha: 2026-01-28 Prioridad: CRITICA (bloqueador para produccion)


Descripcion

Problema que resuelve

El sistema actualmente implementa control de acceso basado en permisos unicamente en el frontend, lo cual presenta un riesgo de seguridad critico. Cualquier usuario autenticado con un token JWT valido puede invocar cualquier operacion del sistema, independientemente de si tiene los permisos adecuados para hacerlo.

Situacion actual:

  • Los permisos se validan en la interfaz de usuario para mostrar/ocultar opciones de menu y botones
  • El backend solo verifica que el usuario este autenticado (token JWT valido)
  • No existe validacion de permisos a nivel de operaciones del sistema
  • Un usuario tecnico podria invocar cualquier operacion directamente, evitando las restricciones del frontend

Riesgos identificados:

RiesgoImpactoEjemplo
Acceso no autorizado a operaciones criticasALTOUn vendedor podria ejecutar facturacion masiva de membresias
Modificacion de datos sin autorizacionALTOUn usuario podria modificar configuraciones de sistema
Exposicion de informacion sensibleMEDIOUn usuario podria consultar datos de otros modulos sin autorizacion
Falta de trazabilidad de accesos denegadosMEDIONo se registran intentos de acceso no autorizados
Incumplimiento de politicas de segregacion de funcionesALTONo se puede garantizar que las politicas de acceso se respeten

Caso critico detectado:

En la revision de la funcionalidad de "Facturacion por Lotes" de membresias, se identifico que cualquier usuario autenticado podria invocar la facturacion masiva de todos los socios, una operacion que deberia estar restringida solo a usuarios con permisos especificos.

Solucion propuesta

Implementar un sistema integral de autorizacion en el backend que:

  1. Valide permisos en cada operacion: Antes de ejecutar cualquier accion, el sistema verifica que el usuario tenga el permiso requerido
  2. Soporte permisos granulares: Estructura jerarquica modulo.entidad.accion para control fino de acceso
  3. Se integre con el sistema de autenticacion existente: Aprovecha el token JWT que ya contiene los permisos del usuario
  4. Registre intentos de acceso: Tanto exitosos como fallidos para fines de auditoria y seguridad
  5. Sea consistente con el frontend: Los mismos permisos que controlan la interfaz deben controlar el backend

Valor de negocio

  • Seguridad: Garantiza que las politicas de acceso se apliquen de forma efectiva
  • Cumplimiento: Permite demostrar segregacion de funciones para auditorias
  • Trazabilidad: Registra todos los intentos de acceso para analisis forense
  • Confianza: Reduce el riesgo de incidentes de seguridad por accesos no autorizados
  • Consistencia: Asegura que frontend y backend respeten las mismas reglas de acceso

Contexto del sistema

Esta funcionalidad se integra con:

  • Sistema de Autenticacion: Los tokens JWT ya incluyen los permisos del usuario
  • Gestion de Usuarios: Maestro de usuarios con sus roles y permisos asignados
  • Gestion de Roles: Definicion de roles con conjuntos de permisos
  • Registro de Auditoria: Sistema de logging para registrar operaciones y accesos

Modelo de Permisos

Estructura de permisos

Los permisos siguen una estructura jerarquica de tres niveles:

{modulo}.{entidad}.{accion}
NivelDescripcionEjemplos
ModuloArea funcional del sistemaventas, compras, membresias, tesoreria, config
EntidadRecurso o proceso dentro del modulofactura, proveedor, socio, retencion, usuario
AccionOperacion especificaver, crear, modificar, eliminar, ejecutar

Ejemplos de permisos:

PermisoDescripcion
ventas.factura.crearCrear facturas de venta
ventas.factura.anularAnular facturas de venta
compras.proveedor.modificarModificar datos de proveedores
membresias.facturacion.ejecutar_loteEjecutar facturacion masiva de membresias
tesoreria.retencion.crearCrear retenciones
config.usuario.crearCrear nuevos usuarios
config.permiso.asignarAsignar permisos a roles o usuarios

Acciones estandar

AccionDescripcionAplica a
verConsultar o listar registrosRecursos y reportes
crearCrear nuevos registrosRecursos
modificarActualizar registros existentesRecursos
eliminarEliminar registros (logico o fisico)Recursos
ejecutarEjecutar procesos o acciones especialesProcesos
aprobarAprobar registros pendientesWorkflows de aprobacion
anularAnular o reversar operacionesComprobantes y transacciones
exportarExportar datos a archivosReportes y listados
imprimirImprimir comprobantes o reportesDocumentos

Permisos especiales

Algunos permisos no siguen la estructura estandar y representan capacidades especiales:

PermisoDescripcion
admin.superAcceso total al sistema (superusuario)
{modulo}.adminAdministrador del modulo (todos los permisos del modulo)
{modulo}.{entidad}.todosTodas las acciones sobre la entidad

Matriz de Permisos por Modulo

Modulo: Ventas

PermisoDescripcion
ventas.factura.verConsultar facturas de venta
ventas.factura.crearCrear facturas de venta
ventas.factura.anularAnular facturas de venta
ventas.factura.imprimirImprimir facturas
ventas.factura.exportarExportar listados de facturas
ventas.nota_credito.crearCrear notas de credito
ventas.nota_credito.anularAnular notas de credito
ventas.presupuesto.verConsultar presupuestos
ventas.presupuesto.crearCrear presupuestos
ventas.presupuesto.modificarModificar presupuestos
ventas.presupuesto.eliminarEliminar presupuestos
ventas.cliente.verConsultar clientes
ventas.cliente.crearCrear clientes
ventas.cliente.modificarModificar clientes
ventas.reporte.verVer reportes de ventas
ventas.reporte.exportarExportar reportes de ventas

Modulo: Compras

PermisoDescripcion
compras.orden.verConsultar ordenes de compra
compras.orden.crearCrear ordenes de compra
compras.orden.modificarModificar ordenes de compra
compras.orden.aprobarAprobar ordenes de compra
compras.orden.anularAnular ordenes de compra
compras.proveedor.verConsultar proveedores
compras.proveedor.crearCrear proveedores
compras.proveedor.modificarModificar proveedores
compras.proveedor.eliminarEliminar proveedores
compras.retencion.verConsultar retenciones de compras
compras.retencion.crearCrear retenciones de compras
compras.retencion.modificarModificar retenciones
compras.reporte.verVer reportes de compras
compras.reporte.exportarExportar reportes de compras

Modulo: Membresias

PermisoDescripcion
membresias.socio.verConsultar socios
membresias.socio.crearCrear socios
membresias.socio.modificarModificar datos de socios
membresias.socio.eliminarDar de baja socios
membresias.grupo_familiar.verConsultar grupos familiares
membresias.grupo_familiar.crearCrear grupos familiares
membresias.grupo_familiar.modificarModificar grupos familiares
membresias.facturacion.ejecutar_loteEjecutar facturacion masiva (CRITICO)
membresias.facturacion.refacturarEjecutar re-facturacion (CRITICO)
membresias.disciplina.verConsultar disciplinas
membresias.disciplina.crearCrear disciplinas
membresias.disciplina.modificarModificar disciplinas
membresias.categoria.verConsultar categorias
membresias.categoria.crearCrear categorias
membresias.categoria.modificarModificar categorias
membresias.reporte.verVer reportes de membresias

Modulo: Cuenta Corriente (CtaCte)

PermisoDescripcion
ctacte.movimiento.verConsultar movimientos de cuenta corriente
ctacte.movimiento.crearCrear movimientos manuales
ctacte.movimiento.anularAnular movimientos
ctacte.retencion.verConsultar retenciones
ctacte.retencion.crearCrear retenciones
ctacte.retencion.modificarModificar retenciones
ctacte.saldo.verConsultar saldos de cuenta corriente
ctacte.reporte.verVer reportes de cuenta corriente
ctacte.reporte.exportarExportar reportes de cuenta corriente

Modulo: Tesoreria

PermisoDescripcion
tesoreria.caja.verConsultar movimientos de caja
tesoreria.caja.crearCrear movimientos de caja
tesoreria.caja.anularAnular movimientos de caja
tesoreria.caja.cerrarCerrar caja del dia
tesoreria.recibo.verConsultar recibos
tesoreria.recibo.crearCrear recibos de cobro
tesoreria.recibo.anularAnular recibos
tesoreria.orden_pago.verConsultar ordenes de pago
tesoreria.orden_pago.crearCrear ordenes de pago
tesoreria.orden_pago.aprobarAprobar ordenes de pago
tesoreria.orden_pago.anularAnular ordenes de pago
tesoreria.concepto_retencion.verConsultar conceptos de retencion
tesoreria.concepto_retencion.crearCrear conceptos de retencion
tesoreria.concepto_retencion.modificarModificar conceptos de retencion
tesoreria.reporte.verVer reportes de tesoreria

Modulo: Contabilidad

PermisoDescripcion
contabilidad.asiento.verConsultar asientos contables
contabilidad.asiento.crearCrear asientos contables
contabilidad.asiento.modificarModificar asientos
contabilidad.asiento.anularAnular asientos
contabilidad.cuenta.verConsultar plan de cuentas
contabilidad.cuenta.crearCrear cuentas contables
contabilidad.cuenta.modificarModificar cuentas contables
contabilidad.ejercicio.cerrarCerrar ejercicio contable
contabilidad.reporte.verVer reportes contables
contabilidad.reporte.exportarExportar reportes contables

Modulo: Stock

PermisoDescripcion
stock.producto.verConsultar productos
stock.producto.crearCrear productos
stock.producto.modificarModificar productos
stock.producto.eliminarEliminar productos
stock.movimiento.verConsultar movimientos de stock
stock.movimiento.crearCrear movimientos de stock
stock.movimiento.anularAnular movimientos de stock
stock.inventario.realizarRealizar ajustes de inventario
stock.reporte.verVer reportes de stock

Modulo: CRM

PermisoDescripcion
crm.cliente.verConsultar clientes CRM
crm.cliente.crearCrear clientes CRM
crm.cliente.modificarModificar clientes CRM
crm.campana.verConsultar campanas
crm.campana.crearCrear campanas
crm.campana.ejecutarEjecutar campanas
crm.oportunidad.verConsultar oportunidades
crm.oportunidad.crearCrear oportunidades
crm.oportunidad.modificarModificar oportunidades
crm.reporte.verVer reportes CRM

Modulo: Configuracion

PermisoDescripcion
config.usuario.verConsultar usuarios
config.usuario.crearCrear usuarios
config.usuario.modificarModificar usuarios
config.usuario.eliminarEliminar usuarios
config.usuario.restablecer_claveRestablecer contraseñas
config.rol.verConsultar roles
config.rol.crearCrear roles
config.rol.modificarModificar roles
config.rol.eliminarEliminar roles
config.permiso.verConsultar permisos
config.permiso.crearCrear permisos
config.permiso.asignarAsignar permisos a roles o usuarios
config.sistema.verVer configuraciones del sistema
config.sistema.modificarModificar configuraciones del sistema
config.auditoria.verConsultar log de auditoria

Modelo de Roles

Roles predefinidos sugeridos

RolDescripcionPermisos tipicos
AdministradorControl total del sistemaTodos los permisos
GerenteSupervision y aprobacionesVer todos los modulos, aprobar operaciones
ContadorGestion contable y fiscalContabilidad completo, reportes de todos los modulos
VendedorOperaciones de ventaVentas (sin anular), clientes (ver/crear)
CompradorOperaciones de compraCompras completo
TesoreroGestion de caja y pagosTesoreria completo
CajeroOperaciones de cajaTesoreria.caja (sin cerrar), recibos
ConsultaSolo lecturaPermisos de tipo ver en modulos autorizados
Administrador MembresiasGestion de sociosMembresias completo incluyendo facturacion masiva

Asignacion de permisos

Los permisos pueden asignarse de dos formas:

  1. A traves de roles: El usuario hereda todos los permisos del rol asignado
  2. Directamente al usuario: Permisos adicionales especificos para el usuario

Regla de acumulacion: Un usuario tiene la union de:

  • Permisos de todos sus roles asignados
  • Permisos asignados directamente al usuario

Frontend (Perspectiva de Usuario)

Vistas de administracion

Gestion de Permisos

  • Listado de todos los permisos del sistema con filtros por modulo
  • Descripcion y detalles de cada permiso
  • Indicador de permisos criticos (operaciones sensibles)

Gestion de Roles

  • Listado de roles existentes con cantidad de usuarios asignados
  • Formulario de alta/modificacion de rol con selector de permisos
  • Vista de permisos agrupados por modulo para facilitar la asignacion
  • Opcion de clonar un rol existente

Asignacion de Permisos a Usuarios

  • Dentro de la edicion de usuario, seccion para asignar roles
  • Opcion de asignar permisos adicionales directamente
  • Vista consolidada de todos los permisos efectivos del usuario

Log de Accesos Denegados

  • Listado de intentos de acceso denegados
  • Filtros por usuario, operacion, fecha
  • Detalle del intento: usuario, operacion solicitada, fecha/hora, origen

Interacciones del usuario

Administrador crea nuevo permiso

  1. El administrador accede a la seccion de permisos en configuracion
  2. El administrador selecciona "Nuevo permiso"
  3. El administrador ingresa el codigo del permiso (formato modulo.entidad.accion)
  4. El administrador ingresa la descripcion del permiso
  5. El administrador indica si es un permiso critico
  6. El sistema valida el formato y unicidad del codigo
  7. El sistema registra el nuevo permiso

Administrador configura rol

  1. El administrador accede a la seccion de roles
  2. El administrador selecciona un rol existente o crea uno nuevo
  3. El sistema muestra la lista de permisos agrupados por modulo
  4. El administrador marca/desmarca los permisos que corresponden al rol
  5. El administrador guarda los cambios
  6. El sistema actualiza los permisos del rol

Administrador asigna rol a usuario

  1. El administrador accede a la edicion del usuario
  2. El administrador ve los roles actuales del usuario
  3. El administrador agrega o quita roles
  4. El sistema muestra los permisos efectivos resultantes
  5. El administrador confirma los cambios
  6. El sistema actualiza los permisos del usuario

Usuario intenta operacion sin permiso

  1. El usuario intenta ejecutar una operacion (ej: facturacion masiva)
  2. El sistema verifica los permisos del usuario
  3. El sistema detecta que el usuario no tiene el permiso requerido
  4. El sistema muestra mensaje: "No tiene permiso para realizar esta operacion"
  5. El sistema registra el intento denegado en el log de auditoria
  6. El usuario es informado pero no puede continuar

Permisos de administracion

PermisoDescripcionAcciones permitidas
config.permiso.verVer lista de permisosConsultar permisos existentes
config.permiso.crearCrear nuevos permisosAlta de nuevos permisos
config.permiso.asignarAsignar permisosModificar permisos de roles y usuarios
config.rol.verVer rolesConsultar roles existentes
config.rol.crearCrear rolesAlta de nuevos roles
config.rol.modificarModificar rolesCambiar permisos de roles
config.rol.eliminarEliminar rolesBaja de roles (si no tienen usuarios)
config.auditoria.verVer log de auditoriaConsultar intentos de acceso

Estados de UI

EstadoDescripcionElementos visuales
Boton/menu deshabilitadoUsuario no tiene permiso para la accionElemento visible pero no clickeable, tooltip explicativo
Seccion ocultaUsuario no tiene permiso para el moduloLa seccion no se muestra en el menu
Error de accesoIntento de acceso denegado en backendModal con mensaje de error, registro en log
Permisos efectivosVista de permisos consolidados del usuarioLista agrupada de todos los permisos

Backend (Perspectiva de Datos de Negocio)

Entidades de negocio

Permiso

Representa una capacidad o accion especifica que puede ser autorizada en el sistema.

Dato de negocioDescripcion
Codigo del permisoIdentificador unico en formato modulo.entidad.accion
DescripcionDescripcion legible de lo que permite el permiso
ModuloModulo al que pertenece el permiso
Es criticoIndica si es un permiso de alto impacto
EstadoActivo o inactivo

Rol

Agrupacion de permisos que representa un perfil de trabajo.

Dato de negocioDescripcion
Nombre del rolNombre identificador del rol (ej: "Contador", "Vendedor")
DescripcionDescripcion del perfil de trabajo
Permisos asignadosConjunto de permisos que otorga el rol
Es rol de sistemaIndica si es un rol predefinido no modificable
EstadoActivo o inactivo

Asignacion Usuario-Rol

Vincula usuarios con roles.

Dato de negocioDescripcion
UsuarioUsuario al que se asigna el rol
RolRol asignado
Fecha de asignacionCuando se realizo la asignacion
Asignado porUsuario que realizo la asignacion

Permiso Directo de Usuario

Permisos asignados directamente a un usuario (no a traves de roles).

Dato de negocioDescripcion
UsuarioUsuario al que se asigna el permiso
PermisoPermiso asignado directamente
Fecha de asignacionCuando se realizo la asignacion
Asignado porUsuario que realizo la asignacion
MotivoRazon por la que se asigno el permiso directo

Registro de Acceso Denegado

Registro de intentos de acceso no autorizados para auditoria.

Dato de negocioDescripcion
UsuarioUsuario que intento el acceso
Permiso requeridoPermiso que se requeria para la operacion
OperacionDescripcion de la operacion intentada
Fecha y horaMomento del intento
OrigenDesde donde se realizo el intento (IP, dispositivo)
ContextoInformacion adicional del intento

Relaciones de negocio

  • Un usuario puede tener uno o varios roles asignados
  • Un rol contiene uno o varios permisos
  • Un usuario puede tener permisos directos adicionales a los de sus roles
  • Los permisos efectivos de un usuario son la union de permisos de roles + permisos directos
  • Cada intento de acceso denegado se registra vinculado al usuario y permiso

Validaciones de negocio

ValidacionDescripcionComportamiento si no cumple
Formato de permiso validoEl codigo debe seguir el formato modulo.entidad.accionError: Formato de permiso invalido
Permiso unicoNo pueden existir dos permisos con el mismo codigoError: El permiso ya existe
Rol con nombre unicoNo pueden existir dos roles con el mismo nombreError: Ya existe un rol con ese nombre
Rol de sistema no modificableLos roles marcados como "de sistema" no pueden editarseError: No se puede modificar un rol de sistema
Rol con usuarios no eliminableUn rol con usuarios asignados no puede eliminarseError: El rol tiene usuarios asignados
Usuario debe tener al menos un rolTodo usuario activo debe tener al menos un rolError: El usuario debe tener al menos un rol

Reglas de Negocio

RN-001: Validacion de permisos en cada operacion

Descripcion: Toda operacion del sistema debe validar que el usuario tenga el permiso correspondiente antes de ejecutarse.

Condicion: Un usuario intenta ejecutar cualquier operacion del sistema.

Accion:

  • Identificar el permiso requerido para la operacion
  • Verificar si el usuario tiene el permiso (a traves de roles o directamente)
  • Si tiene permiso: permitir la operacion
  • Si no tiene permiso: denegar la operacion, registrar el intento y notificar al usuario

RN-002: Permisos efectivos como union de roles y directos

Descripcion: Los permisos efectivos de un usuario son la union de todos los permisos de sus roles mas sus permisos asignados directamente.

Condicion: Se evalua si un usuario tiene un permiso especifico.

Accion:

  • Obtener todos los roles asignados al usuario
  • Obtener todos los permisos de cada rol
  • Obtener todos los permisos directos del usuario
  • El usuario tiene el permiso si aparece en cualquiera de estas fuentes

RN-003: Permiso de superusuario

Descripcion: El permiso admin.super otorga acceso total al sistema, permitiendo todas las operaciones.

Condicion: Se verifica un permiso para un usuario con admin.super.

Accion:

  • Si el usuario tiene el permiso admin.super: permitir cualquier operacion
  • Este permiso debe asignarse con extrema precaucion
  • Solo usuarios de maxima confianza deben tener este permiso

RN-004: Permisos de administrador de modulo

Descripcion: El permiso {modulo}.admin otorga todos los permisos del modulo especificado.

Condicion: Se verifica un permiso de un modulo para un usuario con {modulo}.admin.

Accion:

  • Si el usuario tiene ventas.admin y se verifica ventas.factura.crear: permitir
  • El permiso de admin de modulo equivale a tener todos los permisos de ese modulo

RN-005: Registro obligatorio de accesos denegados

Descripcion: Todo intento de acceso denegado debe quedar registrado en el log de auditoria.

Condicion: Un usuario intenta una operacion y no tiene el permiso requerido.

Accion:

  • Registrar: usuario, permiso requerido, operacion, fecha/hora, origen
  • Continuar con la denegacion normal
  • Este registro no debe fallar ni impedir la respuesta al usuario

RN-006: Sincronizacion frontend-backend

Descripcion: Los permisos que controlan la interfaz de usuario deben ser los mismos que se validan en el backend.

Condicion: Se configura un permiso para cualquier funcionalidad.

Accion:

  • El codigo del permiso debe ser identico en frontend y backend
  • Si el frontend oculta una opcion por falta de permiso, el backend debe denegar la operacion
  • No debe existir una operacion que el frontend permita pero el backend deniegue (o viceversa)

RN-007: Roles de sistema protegidos

Descripcion: Ciertos roles predefinidos como "Administrador" no pueden ser modificados ni eliminados.

Condicion: Se intenta modificar o eliminar un rol marcado como "de sistema".

Accion:

  • Impedir la modificacion o eliminacion
  • Informar al usuario que es un rol protegido
  • Solo se pueden agregar o quitar usuarios del rol

RN-008: Herencia de permisos en estructura jerarquica

Descripcion: Un permiso de nivel superior implica los permisos de nivel inferior.

Condicion: Se verifica un permiso especifico y el usuario tiene un permiso de nivel superior.

Accion:

  • Si tiene ventas.factura.todos: tiene todos los permisos de facturas de venta
  • Si tiene ventas.admin: tiene todos los permisos del modulo ventas
  • Si tiene admin.super: tiene todos los permisos del sistema

Casos de Uso

CU-001: Administrador crea nuevo permiso

Actor: Administrador del Sistema

Objetivo: Registrar un nuevo permiso para una funcionalidad recien desarrollada

Precondiciones:

  • Usuario autenticado con permiso config.permiso.crear
  • El codigo del permiso no existe en el sistema

Flujo principal:

  1. El administrador accede a la seccion de permisos en configuracion
  2. El administrador selecciona "Nuevo permiso"
  3. El sistema presenta el formulario de creacion
  4. El administrador ingresa el codigo del permiso (ej: membresias.facturacion.ejecutar_lote)
  5. El administrador ingresa la descripcion (ej: "Permite ejecutar facturacion masiva de membresias")
  6. El administrador indica que es un permiso critico
  7. El administrador confirma la creacion
  8. El sistema valida que el formato sea correcto
  9. El sistema valida que el codigo no exista
  10. El sistema registra el nuevo permiso
  11. El sistema confirma la creacion exitosa

Postcondiciones:

  • El permiso esta disponible para ser asignado a roles o usuarios
  • El permiso aparece en el listado de permisos del modulo correspondiente

Flujos alternativos:

  • Formato invalido: El sistema muestra error indicando el formato correcto
  • Permiso existente: El sistema informa que el codigo ya existe

CU-002: Administrador configura permisos de un rol

Actor: Administrador del Sistema

Objetivo: Definir los permisos que tendra el rol "Contador"

Precondiciones:

  • Usuario autenticado con permiso config.rol.modificar
  • El rol "Contador" existe en el sistema

Flujo principal:

  1. El administrador accede a la seccion de roles
  2. El administrador selecciona el rol "Contador"
  3. El sistema muestra los permisos actuales del rol, agrupados por modulo
  4. El administrador navega al modulo "Contabilidad"
  5. El administrador marca todos los permisos de contabilidad
  6. El administrador navega al modulo "Ventas"
  7. El administrador marca solo los permisos de ventas.reporte.*
  8. El administrador navega al modulo "Compras"
  9. El administrador marca solo los permisos de compras.reporte.*
  10. El administrador guarda los cambios
  11. El sistema actualiza los permisos del rol
  12. El sistema confirma los cambios

Postcondiciones:

  • El rol "Contador" tiene los permisos seleccionados
  • Todos los usuarios con rol "Contador" heredan los nuevos permisos
  • Los cambios son efectivos inmediatamente

Flujos alternativos:

  • Rol de sistema: Si es un rol protegido, el sistema impide la modificacion
  • Sin cambios: Si no se modifico nada, el sistema no realiza actualizacion

CU-003: Administrador asigna rol a usuario

Actor: Administrador del Sistema

Objetivo: Dar acceso a un nuevo empleado asignandole el rol "Vendedor"

Precondiciones:

  • Usuario autenticado con permiso config.usuario.modificar
  • El usuario destino existe en el sistema
  • El rol "Vendedor" existe y esta activo

Flujo principal:

  1. El administrador accede a la gestion de usuarios
  2. El administrador busca y selecciona al usuario
  3. El sistema muestra los datos del usuario, incluyendo roles actuales
  4. El administrador accede a la seccion de roles
  5. El administrador agrega el rol "Vendedor"
  6. El sistema muestra la vista previa de permisos efectivos
  7. El administrador verifica que los permisos son correctos
  8. El administrador confirma los cambios
  9. El sistema asigna el rol al usuario
  10. El sistema registra la asignacion (quien, cuando, que rol)
  11. El sistema confirma la asignacion

Postcondiciones:

  • El usuario tiene el rol "Vendedor" asignado
  • El usuario puede ejecutar las operaciones permitidas por el rol
  • La asignacion queda registrada en auditoria

Flujos alternativos:

  • Usuario inactivo: El sistema advierte que el usuario esta inactivo
  • Rol ya asignado: El sistema informa que el usuario ya tiene el rol

CU-004: Usuario intenta operacion sin permiso (facturacion masiva)

Actor: Usuario Vendedor

Objetivo: El vendedor intenta ejecutar facturacion masiva pero no tiene permiso

Precondiciones:

  • Usuario autenticado con rol "Vendedor"
  • El rol "Vendedor" NO tiene el permiso membresias.facturacion.ejecutar_lote
  • El usuario intenta acceder a la facturacion masiva de membresias

Flujo principal:

  1. El vendedor navega al modulo de membresias
  2. El vendedor accede a la opcion de facturacion por lotes
  3. El vendedor configura los parametros (rango de socios, periodo)
  4. El vendedor presiona "Ejecutar facturacion"
  5. El sistema verifica los permisos del usuario
  6. El sistema detecta que no tiene membresias.facturacion.ejecutar_lote
  7. El sistema deniega la operacion
  8. El sistema registra el intento en el log de accesos denegados
  9. El sistema muestra mensaje: "No tiene permiso para realizar esta operacion"
  10. El vendedor es informado y no puede continuar

Postcondiciones:

  • La facturacion masiva NO se ejecuta
  • El intento queda registrado en el log de auditoria
  • El vendedor puede solicitar el permiso a un administrador si corresponde

Flujos alternativos:

  • Interfaz correctamente configurada: El boton deberia estar deshabilitado desde el inicio
  • Usuario con permiso: La operacion se ejecuta normalmente

CU-005: Consulta de intentos de acceso denegados

Actor: Auditor / Administrador de Seguridad

Objetivo: Revisar intentos de acceso no autorizados del ultimo mes

Precondiciones:

  • Usuario autenticado con permiso config.auditoria.ver

Flujo principal:

  1. El auditor accede a la seccion de auditoria
  2. El auditor selecciona "Accesos denegados"
  3. El sistema muestra el listado de intentos denegados
  4. El auditor configura filtros: ultimos 30 dias
  5. El sistema filtra los registros
  6. El auditor identifica un patron: usuario "JPerez" con multiples intentos a config.sistema.modificar
  7. El auditor revisa el detalle de cada intento
  8. El auditor exporta el reporte para analisis
  9. El auditor toma accion: revisa con el usuario si necesita ese acceso o es comportamiento sospechoso

Postcondiciones:

  • El auditor tiene visibilidad de intentos de acceso no autorizados
  • Se pueden identificar patrones de comportamiento sospechoso
  • Se puede tomar accion preventiva o correctiva

Flujos alternativos:

  • Sin registros: El sistema muestra mensaje "No se encontraron intentos denegados"
  • Muchos registros: El sistema pagina los resultados

CU-006: Usuario con permiso ejecuta operacion critica

Actor: Administrador de Membresias

Objetivo: Ejecutar facturacion masiva con los permisos adecuados

Precondiciones:

  • Usuario autenticado con permiso membresias.facturacion.ejecutar_lote
  • Usuario tiene rol "Administrador Membresias"

Flujo principal:

  1. El administrador navega al modulo de membresias
  2. El administrador accede a la opcion de facturacion por lotes
  3. El sistema verifica que el usuario tiene el permiso requerido
  4. El sistema permite el acceso a la vista
  5. El administrador configura los parametros (rango de socios, periodo)
  6. El administrador presiona "Ejecutar facturacion"
  7. El sistema verifica nuevamente el permiso antes de ejecutar
  8. El sistema confirma el permiso y ejecuta la facturacion
  9. El sistema registra la operacion exitosa en auditoria
  10. El sistema presenta los resultados de la facturacion

Postcondiciones:

  • La facturacion masiva se ejecuta correctamente
  • La operacion queda registrada en auditoria con el usuario que la ejecuto
  • El administrador puede ver los resultados

Flujos alternativos:

  • Permiso revocado durante la sesion: El sistema deniega con mensaje actualizado

Consideraciones

Seguridad

Control de acceso en multiples capas:

  • Capa 1: Interfaz de usuario (oculta/deshabilita opciones sin permiso)
  • Capa 2: Backend (valida permisos antes de cada operacion)
  • Capa 3: Auditoria (registra todos los intentos)

Permisos criticos:

  • Las operaciones de alto impacto deben estar marcadas como criticas
  • Ejemplos: facturacion masiva, cierre de ejercicio, eliminacion de datos
  • Estos permisos requieren supervision especial en su asignacion

Principio de minimo privilegio:

  • Los usuarios deben tener solo los permisos necesarios para su trabajo
  • Evitar asignar permisos de tipo admin salvo casos justificados
  • Revisar periodicamente los permisos asignados

Segregacion de funciones:

  • Ciertas combinaciones de permisos pueden representar riesgo
  • Ejemplo: compras.orden.crear + compras.orden.aprobar (mismo usuario crea y aprueba)
  • El sistema debe permitir identificar estas situaciones

Auditoria

Operaciones a registrar:

OperacionInformacion a capturar
Acceso denegadoUsuario, permiso requerido, operacion, fecha/hora, origen
Creacion de permisoAdministrador, codigo del permiso, fecha
Modificacion de rolAdministrador, rol, permisos agregados/quitados, fecha
Asignacion de rolAdministrador, usuario destino, rol asignado, fecha
Asignacion de permiso directoAdministrador, usuario destino, permiso, motivo, fecha

Retencion de logs:

  • Los registros de acceso denegado deben conservarse por el tiempo requerido por regulaciones
  • Minimo sugerido: 1 año
  • Los registros deben ser inmutables

Alertas:

  • Multiples intentos de acceso denegados del mismo usuario en corto tiempo
  • Intentos de acceso a permisos criticos
  • Cambios en roles de sistema

Rendimiento

Volumenes esperados:

  • Cantidad de permisos: 100-200 permisos diferentes
  • Cantidad de roles: 10-30 roles tipicos
  • Cantidad de usuarios: variable segun organizacion
  • Validaciones de permiso: multiples por cada accion del usuario

Tiempos esperados:

  • La validacion de permisos debe ser instantanea (no perceptible por el usuario)
  • El sistema debe optimizar la obtencion de permisos efectivos del usuario
  • Los permisos del usuario pueden cachearse durante la sesion

Dependencias

Funcionalidades relacionadas

  • Sistema de Autenticacion: Proporciona la identidad del usuario y el token JWT
  • Gestion de Usuarios: Maestro de usuarios donde se asignan roles y permisos
  • Sistema de Auditoria: Registra las operaciones y los intentos de acceso

Integraciones

  • Token JWT: Los permisos del usuario deben estar disponibles en el payload del token
  • Frontend: Debe consumir los permisos para controlar la interfaz de usuario
  • Todos los modulos del sistema: Cada operacion debe validar permisos

Criterios de Aceptacion

La funcionalidad se considera completa cuando:

Sistema de permisos

  • [ ] AC-001: El sistema valida permisos antes de ejecutar cualquier operacion sensible
  • [ ] AC-002: Los permisos siguen la estructura jerarquica modulo.entidad.accion
  • [ ] AC-003: Los permisos de administrador de modulo ({modulo}.admin) otorgan acceso completo al modulo
  • [ ] AC-004: El permiso de superusuario (admin.super) otorga acceso total al sistema

Gestion de roles

  • [ ] AC-005: Los administradores pueden crear, modificar y eliminar roles (excepto roles de sistema)
  • [ ] AC-006: Los roles de sistema estan protegidos contra modificacion
  • [ ] AC-007: Un rol no puede eliminarse si tiene usuarios asignados
  • [ ] AC-008: Los cambios en roles son efectivos inmediatamente para los usuarios

Asignacion de permisos

  • [ ] AC-009: Los administradores pueden asignar roles a usuarios
  • [ ] AC-010: Los administradores pueden asignar permisos directos a usuarios (con motivo)
  • [ ] AC-011: Los permisos efectivos del usuario son la union de roles + directos
  • [ ] AC-012: Los cambios en permisos son efectivos inmediatamente

Validacion de acceso

  • [ ] AC-013: Las operaciones sin permiso son denegadas con mensaje claro al usuario
  • [ ] AC-014: Los intentos de acceso denegados se registran en auditoria
  • [ ] AC-015: El frontend y backend validan los mismos permisos de forma consistente

Auditoria

  • [ ] AC-016: Los administradores pueden consultar el log de accesos denegados
  • [ ] AC-017: El log incluye: usuario, permiso requerido, operacion, fecha/hora
  • [ ] AC-018: Los registros de auditoria son inmutables

Caso critico: Facturacion masiva

  • [ ] AC-019: La operacion de facturacion masiva de membresias requiere el permiso membresias.facturacion.ejecutar_lote
  • [ ] AC-020: Un usuario sin ese permiso no puede ejecutar la facturacion aunque tenga acceso a la vista
  • [ ] AC-021: El intento de facturacion sin permiso queda registrado en auditoria

Notas Adicionales

Migracion de permisos existentes

El sistema actualmente tiene permisos implementados en el frontend. La migracion debe:

  1. Relevar todos los permisos existentes en el frontend
  2. Mapearlos a la nueva estructura modulo.entidad.accion
  3. Asegurar que no se pierda funcionalidad existente
  4. Implementar la validacion en backend de forma gradual

Permisos en contexto multi-tenant

El sistema es multi-tenant (multiples sucursales/cajas). Consideraciones:

  • Los permisos son globales (no varian por sucursal)
  • La asignacion de roles puede variar por sucursal si se requiere
  • El permiso se valida independientemente del schema activo

Permisos especiales para operaciones masivas

Las operaciones que afectan multiples registros (facturacion masiva, actualizaciones en lote) deben tener permisos especificos separados de las operaciones individuales:

  • ventas.factura.crear - Crear una factura individual
  • membresias.facturacion.ejecutar_lote - Facturacion masiva (permiso separado)

Esto permite controlar quien puede ejecutar operaciones de alto impacto.

Compatibilidad con el token JWT actual

El token JWT actual ya incluye un array de permisos en su payload. El nuevo sistema debe:

  • Utilizar ese array para las validaciones
  • No requerir cambios en la estructura del token
  • Permitir que el frontend siga consumiendo los permisos del token

Historial de Cambios

FechaVersionAutorDescripcion
2026-01-281.0SistemaCreacion del documento - Especificacion de requisitos de negocio