Appearance
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:
| Riesgo | Impacto | Ejemplo |
|---|---|---|
| Acceso no autorizado a operaciones criticas | ALTO | Un vendedor podria ejecutar facturacion masiva de membresias |
| Modificacion de datos sin autorizacion | ALTO | Un usuario podria modificar configuraciones de sistema |
| Exposicion de informacion sensible | MEDIO | Un usuario podria consultar datos de otros modulos sin autorizacion |
| Falta de trazabilidad de accesos denegados | MEDIO | No se registran intentos de acceso no autorizados |
| Incumplimiento de politicas de segregacion de funciones | ALTO | No 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:
- Valide permisos en cada operacion: Antes de ejecutar cualquier accion, el sistema verifica que el usuario tenga el permiso requerido
- Soporte permisos granulares: Estructura jerarquica
modulo.entidad.accionpara control fino de acceso - Se integre con el sistema de autenticacion existente: Aprovecha el token JWT que ya contiene los permisos del usuario
- Registre intentos de acceso: Tanto exitosos como fallidos para fines de auditoria y seguridad
- 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}| Nivel | Descripcion | Ejemplos |
|---|---|---|
| Modulo | Area funcional del sistema | ventas, compras, membresias, tesoreria, config |
| Entidad | Recurso o proceso dentro del modulo | factura, proveedor, socio, retencion, usuario |
| Accion | Operacion especifica | ver, crear, modificar, eliminar, ejecutar |
Ejemplos de permisos:
| Permiso | Descripcion |
|---|---|
ventas.factura.crear | Crear facturas de venta |
ventas.factura.anular | Anular facturas de venta |
compras.proveedor.modificar | Modificar datos de proveedores |
membresias.facturacion.ejecutar_lote | Ejecutar facturacion masiva de membresias |
tesoreria.retencion.crear | Crear retenciones |
config.usuario.crear | Crear nuevos usuarios |
config.permiso.asignar | Asignar permisos a roles o usuarios |
Acciones estandar
| Accion | Descripcion | Aplica a |
|---|---|---|
ver | Consultar o listar registros | Recursos y reportes |
crear | Crear nuevos registros | Recursos |
modificar | Actualizar registros existentes | Recursos |
eliminar | Eliminar registros (logico o fisico) | Recursos |
ejecutar | Ejecutar procesos o acciones especiales | Procesos |
aprobar | Aprobar registros pendientes | Workflows de aprobacion |
anular | Anular o reversar operaciones | Comprobantes y transacciones |
exportar | Exportar datos a archivos | Reportes y listados |
imprimir | Imprimir comprobantes o reportes | Documentos |
Permisos especiales
Algunos permisos no siguen la estructura estandar y representan capacidades especiales:
| Permiso | Descripcion |
|---|---|
admin.super | Acceso total al sistema (superusuario) |
{modulo}.admin | Administrador del modulo (todos los permisos del modulo) |
{modulo}.{entidad}.todos | Todas las acciones sobre la entidad |
Matriz de Permisos por Modulo
Modulo: Ventas
| Permiso | Descripcion |
|---|---|
ventas.factura.ver | Consultar facturas de venta |
ventas.factura.crear | Crear facturas de venta |
ventas.factura.anular | Anular facturas de venta |
ventas.factura.imprimir | Imprimir facturas |
ventas.factura.exportar | Exportar listados de facturas |
ventas.nota_credito.crear | Crear notas de credito |
ventas.nota_credito.anular | Anular notas de credito |
ventas.presupuesto.ver | Consultar presupuestos |
ventas.presupuesto.crear | Crear presupuestos |
ventas.presupuesto.modificar | Modificar presupuestos |
ventas.presupuesto.eliminar | Eliminar presupuestos |
ventas.cliente.ver | Consultar clientes |
ventas.cliente.crear | Crear clientes |
ventas.cliente.modificar | Modificar clientes |
ventas.reporte.ver | Ver reportes de ventas |
ventas.reporte.exportar | Exportar reportes de ventas |
Modulo: Compras
| Permiso | Descripcion |
|---|---|
compras.orden.ver | Consultar ordenes de compra |
compras.orden.crear | Crear ordenes de compra |
compras.orden.modificar | Modificar ordenes de compra |
compras.orden.aprobar | Aprobar ordenes de compra |
compras.orden.anular | Anular ordenes de compra |
compras.proveedor.ver | Consultar proveedores |
compras.proveedor.crear | Crear proveedores |
compras.proveedor.modificar | Modificar proveedores |
compras.proveedor.eliminar | Eliminar proveedores |
compras.retencion.ver | Consultar retenciones de compras |
compras.retencion.crear | Crear retenciones de compras |
compras.retencion.modificar | Modificar retenciones |
compras.reporte.ver | Ver reportes de compras |
compras.reporte.exportar | Exportar reportes de compras |
Modulo: Membresias
| Permiso | Descripcion |
|---|---|
membresias.socio.ver | Consultar socios |
membresias.socio.crear | Crear socios |
membresias.socio.modificar | Modificar datos de socios |
membresias.socio.eliminar | Dar de baja socios |
membresias.grupo_familiar.ver | Consultar grupos familiares |
membresias.grupo_familiar.crear | Crear grupos familiares |
membresias.grupo_familiar.modificar | Modificar grupos familiares |
membresias.facturacion.ejecutar_lote | Ejecutar facturacion masiva (CRITICO) |
membresias.facturacion.refacturar | Ejecutar re-facturacion (CRITICO) |
membresias.disciplina.ver | Consultar disciplinas |
membresias.disciplina.crear | Crear disciplinas |
membresias.disciplina.modificar | Modificar disciplinas |
membresias.categoria.ver | Consultar categorias |
membresias.categoria.crear | Crear categorias |
membresias.categoria.modificar | Modificar categorias |
membresias.reporte.ver | Ver reportes de membresias |
Modulo: Cuenta Corriente (CtaCte)
| Permiso | Descripcion |
|---|---|
ctacte.movimiento.ver | Consultar movimientos de cuenta corriente |
ctacte.movimiento.crear | Crear movimientos manuales |
ctacte.movimiento.anular | Anular movimientos |
ctacte.retencion.ver | Consultar retenciones |
ctacte.retencion.crear | Crear retenciones |
ctacte.retencion.modificar | Modificar retenciones |
ctacte.saldo.ver | Consultar saldos de cuenta corriente |
ctacte.reporte.ver | Ver reportes de cuenta corriente |
ctacte.reporte.exportar | Exportar reportes de cuenta corriente |
Modulo: Tesoreria
| Permiso | Descripcion |
|---|---|
tesoreria.caja.ver | Consultar movimientos de caja |
tesoreria.caja.crear | Crear movimientos de caja |
tesoreria.caja.anular | Anular movimientos de caja |
tesoreria.caja.cerrar | Cerrar caja del dia |
tesoreria.recibo.ver | Consultar recibos |
tesoreria.recibo.crear | Crear recibos de cobro |
tesoreria.recibo.anular | Anular recibos |
tesoreria.orden_pago.ver | Consultar ordenes de pago |
tesoreria.orden_pago.crear | Crear ordenes de pago |
tesoreria.orden_pago.aprobar | Aprobar ordenes de pago |
tesoreria.orden_pago.anular | Anular ordenes de pago |
tesoreria.concepto_retencion.ver | Consultar conceptos de retencion |
tesoreria.concepto_retencion.crear | Crear conceptos de retencion |
tesoreria.concepto_retencion.modificar | Modificar conceptos de retencion |
tesoreria.reporte.ver | Ver reportes de tesoreria |
Modulo: Contabilidad
| Permiso | Descripcion |
|---|---|
contabilidad.asiento.ver | Consultar asientos contables |
contabilidad.asiento.crear | Crear asientos contables |
contabilidad.asiento.modificar | Modificar asientos |
contabilidad.asiento.anular | Anular asientos |
contabilidad.cuenta.ver | Consultar plan de cuentas |
contabilidad.cuenta.crear | Crear cuentas contables |
contabilidad.cuenta.modificar | Modificar cuentas contables |
contabilidad.ejercicio.cerrar | Cerrar ejercicio contable |
contabilidad.reporte.ver | Ver reportes contables |
contabilidad.reporte.exportar | Exportar reportes contables |
Modulo: Stock
| Permiso | Descripcion |
|---|---|
stock.producto.ver | Consultar productos |
stock.producto.crear | Crear productos |
stock.producto.modificar | Modificar productos |
stock.producto.eliminar | Eliminar productos |
stock.movimiento.ver | Consultar movimientos de stock |
stock.movimiento.crear | Crear movimientos de stock |
stock.movimiento.anular | Anular movimientos de stock |
stock.inventario.realizar | Realizar ajustes de inventario |
stock.reporte.ver | Ver reportes de stock |
Modulo: CRM
| Permiso | Descripcion |
|---|---|
crm.cliente.ver | Consultar clientes CRM |
crm.cliente.crear | Crear clientes CRM |
crm.cliente.modificar | Modificar clientes CRM |
crm.campana.ver | Consultar campanas |
crm.campana.crear | Crear campanas |
crm.campana.ejecutar | Ejecutar campanas |
crm.oportunidad.ver | Consultar oportunidades |
crm.oportunidad.crear | Crear oportunidades |
crm.oportunidad.modificar | Modificar oportunidades |
crm.reporte.ver | Ver reportes CRM |
Modulo: Configuracion
| Permiso | Descripcion |
|---|---|
config.usuario.ver | Consultar usuarios |
config.usuario.crear | Crear usuarios |
config.usuario.modificar | Modificar usuarios |
config.usuario.eliminar | Eliminar usuarios |
config.usuario.restablecer_clave | Restablecer contraseñas |
config.rol.ver | Consultar roles |
config.rol.crear | Crear roles |
config.rol.modificar | Modificar roles |
config.rol.eliminar | Eliminar roles |
config.permiso.ver | Consultar permisos |
config.permiso.crear | Crear permisos |
config.permiso.asignar | Asignar permisos a roles o usuarios |
config.sistema.ver | Ver configuraciones del sistema |
config.sistema.modificar | Modificar configuraciones del sistema |
config.auditoria.ver | Consultar log de auditoria |
Modelo de Roles
Roles predefinidos sugeridos
| Rol | Descripcion | Permisos tipicos |
|---|---|---|
| Administrador | Control total del sistema | Todos los permisos |
| Gerente | Supervision y aprobaciones | Ver todos los modulos, aprobar operaciones |
| Contador | Gestion contable y fiscal | Contabilidad completo, reportes de todos los modulos |
| Vendedor | Operaciones de venta | Ventas (sin anular), clientes (ver/crear) |
| Comprador | Operaciones de compra | Compras completo |
| Tesorero | Gestion de caja y pagos | Tesoreria completo |
| Cajero | Operaciones de caja | Tesoreria.caja (sin cerrar), recibos |
| Consulta | Solo lectura | Permisos de tipo ver en modulos autorizados |
| Administrador Membresias | Gestion de socios | Membresias completo incluyendo facturacion masiva |
Asignacion de permisos
Los permisos pueden asignarse de dos formas:
- A traves de roles: El usuario hereda todos los permisos del rol asignado
- 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
- El administrador accede a la seccion de permisos en configuracion
- El administrador selecciona "Nuevo permiso"
- El administrador ingresa el codigo del permiso (formato
modulo.entidad.accion) - El administrador ingresa la descripcion del permiso
- El administrador indica si es un permiso critico
- El sistema valida el formato y unicidad del codigo
- El sistema registra el nuevo permiso
Administrador configura rol
- El administrador accede a la seccion de roles
- El administrador selecciona un rol existente o crea uno nuevo
- El sistema muestra la lista de permisos agrupados por modulo
- El administrador marca/desmarca los permisos que corresponden al rol
- El administrador guarda los cambios
- El sistema actualiza los permisos del rol
Administrador asigna rol a usuario
- El administrador accede a la edicion del usuario
- El administrador ve los roles actuales del usuario
- El administrador agrega o quita roles
- El sistema muestra los permisos efectivos resultantes
- El administrador confirma los cambios
- El sistema actualiza los permisos del usuario
Usuario intenta operacion sin permiso
- El usuario intenta ejecutar una operacion (ej: facturacion masiva)
- El sistema verifica los permisos del usuario
- El sistema detecta que el usuario no tiene el permiso requerido
- El sistema muestra mensaje: "No tiene permiso para realizar esta operacion"
- El sistema registra el intento denegado en el log de auditoria
- El usuario es informado pero no puede continuar
Permisos de administracion
| Permiso | Descripcion | Acciones permitidas |
|---|---|---|
config.permiso.ver | Ver lista de permisos | Consultar permisos existentes |
config.permiso.crear | Crear nuevos permisos | Alta de nuevos permisos |
config.permiso.asignar | Asignar permisos | Modificar permisos de roles y usuarios |
config.rol.ver | Ver roles | Consultar roles existentes |
config.rol.crear | Crear roles | Alta de nuevos roles |
config.rol.modificar | Modificar roles | Cambiar permisos de roles |
config.rol.eliminar | Eliminar roles | Baja de roles (si no tienen usuarios) |
config.auditoria.ver | Ver log de auditoria | Consultar intentos de acceso |
Estados de UI
| Estado | Descripcion | Elementos visuales |
|---|---|---|
| Boton/menu deshabilitado | Usuario no tiene permiso para la accion | Elemento visible pero no clickeable, tooltip explicativo |
| Seccion oculta | Usuario no tiene permiso para el modulo | La seccion no se muestra en el menu |
| Error de acceso | Intento de acceso denegado en backend | Modal con mensaje de error, registro en log |
| Permisos efectivos | Vista de permisos consolidados del usuario | Lista 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 negocio | Descripcion |
|---|---|
| Codigo del permiso | Identificador unico en formato modulo.entidad.accion |
| Descripcion | Descripcion legible de lo que permite el permiso |
| Modulo | Modulo al que pertenece el permiso |
| Es critico | Indica si es un permiso de alto impacto |
| Estado | Activo o inactivo |
Rol
Agrupacion de permisos que representa un perfil de trabajo.
| Dato de negocio | Descripcion |
|---|---|
| Nombre del rol | Nombre identificador del rol (ej: "Contador", "Vendedor") |
| Descripcion | Descripcion del perfil de trabajo |
| Permisos asignados | Conjunto de permisos que otorga el rol |
| Es rol de sistema | Indica si es un rol predefinido no modificable |
| Estado | Activo o inactivo |
Asignacion Usuario-Rol
Vincula usuarios con roles.
| Dato de negocio | Descripcion |
|---|---|
| Usuario | Usuario al que se asigna el rol |
| Rol | Rol asignado |
| Fecha de asignacion | Cuando se realizo la asignacion |
| Asignado por | Usuario que realizo la asignacion |
Permiso Directo de Usuario
Permisos asignados directamente a un usuario (no a traves de roles).
| Dato de negocio | Descripcion |
|---|---|
| Usuario | Usuario al que se asigna el permiso |
| Permiso | Permiso asignado directamente |
| Fecha de asignacion | Cuando se realizo la asignacion |
| Asignado por | Usuario que realizo la asignacion |
| Motivo | Razon por la que se asigno el permiso directo |
Registro de Acceso Denegado
Registro de intentos de acceso no autorizados para auditoria.
| Dato de negocio | Descripcion |
|---|---|
| Usuario | Usuario que intento el acceso |
| Permiso requerido | Permiso que se requeria para la operacion |
| Operacion | Descripcion de la operacion intentada |
| Fecha y hora | Momento del intento |
| Origen | Desde donde se realizo el intento (IP, dispositivo) |
| Contexto | Informacion 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
| Validacion | Descripcion | Comportamiento si no cumple |
|---|---|---|
| Formato de permiso valido | El codigo debe seguir el formato modulo.entidad.accion | Error: Formato de permiso invalido |
| Permiso unico | No pueden existir dos permisos con el mismo codigo | Error: El permiso ya existe |
| Rol con nombre unico | No pueden existir dos roles con el mismo nombre | Error: Ya existe un rol con ese nombre |
| Rol de sistema no modificable | Los roles marcados como "de sistema" no pueden editarse | Error: No se puede modificar un rol de sistema |
| Rol con usuarios no eliminable | Un rol con usuarios asignados no puede eliminarse | Error: El rol tiene usuarios asignados |
| Usuario debe tener al menos un rol | Todo usuario activo debe tener al menos un rol | Error: 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.adminy se verificaventas.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:
- El administrador accede a la seccion de permisos en configuracion
- El administrador selecciona "Nuevo permiso"
- El sistema presenta el formulario de creacion
- El administrador ingresa el codigo del permiso (ej:
membresias.facturacion.ejecutar_lote) - El administrador ingresa la descripcion (ej: "Permite ejecutar facturacion masiva de membresias")
- El administrador indica que es un permiso critico
- El administrador confirma la creacion
- El sistema valida que el formato sea correcto
- El sistema valida que el codigo no exista
- El sistema registra el nuevo permiso
- 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:
- El administrador accede a la seccion de roles
- El administrador selecciona el rol "Contador"
- El sistema muestra los permisos actuales del rol, agrupados por modulo
- El administrador navega al modulo "Contabilidad"
- El administrador marca todos los permisos de contabilidad
- El administrador navega al modulo "Ventas"
- El administrador marca solo los permisos de
ventas.reporte.* - El administrador navega al modulo "Compras"
- El administrador marca solo los permisos de
compras.reporte.* - El administrador guarda los cambios
- El sistema actualiza los permisos del rol
- 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:
- El administrador accede a la gestion de usuarios
- El administrador busca y selecciona al usuario
- El sistema muestra los datos del usuario, incluyendo roles actuales
- El administrador accede a la seccion de roles
- El administrador agrega el rol "Vendedor"
- El sistema muestra la vista previa de permisos efectivos
- El administrador verifica que los permisos son correctos
- El administrador confirma los cambios
- El sistema asigna el rol al usuario
- El sistema registra la asignacion (quien, cuando, que rol)
- 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:
- El vendedor navega al modulo de membresias
- El vendedor accede a la opcion de facturacion por lotes
- El vendedor configura los parametros (rango de socios, periodo)
- El vendedor presiona "Ejecutar facturacion"
- El sistema verifica los permisos del usuario
- El sistema detecta que no tiene
membresias.facturacion.ejecutar_lote - El sistema deniega la operacion
- El sistema registra el intento en el log de accesos denegados
- El sistema muestra mensaje: "No tiene permiso para realizar esta operacion"
- 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:
- El auditor accede a la seccion de auditoria
- El auditor selecciona "Accesos denegados"
- El sistema muestra el listado de intentos denegados
- El auditor configura filtros: ultimos 30 dias
- El sistema filtra los registros
- El auditor identifica un patron: usuario "JPerez" con multiples intentos a
config.sistema.modificar - El auditor revisa el detalle de cada intento
- El auditor exporta el reporte para analisis
- 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:
- El administrador navega al modulo de membresias
- El administrador accede a la opcion de facturacion por lotes
- El sistema verifica que el usuario tiene el permiso requerido
- El sistema permite el acceso a la vista
- El administrador configura los parametros (rango de socios, periodo)
- El administrador presiona "Ejecutar facturacion"
- El sistema verifica nuevamente el permiso antes de ejecutar
- El sistema confirma el permiso y ejecuta la facturacion
- El sistema registra la operacion exitosa en auditoria
- 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
adminsalvo 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:
| Operacion | Informacion a capturar |
|---|---|
| Acceso denegado | Usuario, permiso requerido, operacion, fecha/hora, origen |
| Creacion de permiso | Administrador, codigo del permiso, fecha |
| Modificacion de rol | Administrador, rol, permisos agregados/quitados, fecha |
| Asignacion de rol | Administrador, usuario destino, rol asignado, fecha |
| Asignacion de permiso directo | Administrador, 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:
- Relevar todos los permisos existentes en el frontend
- Mapearlos a la nueva estructura
modulo.entidad.accion - Asegurar que no se pierda funcionalidad existente
- 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 individualmembresias.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
| Fecha | Version | Autor | Descripcion |
|---|---|---|---|
| 2026-01-28 | 1.0 | Sistema | Creacion del documento - Especificacion de requisitos de negocio |