feat: rol manager, arreglos de reportes (cancelacion/afluencias), credito unico, cliente enkontrol, vendedor en bitacora y actualizar afluencia existente
This commit is contained in:
@@ -1,20 +1,31 @@
|
||||
/**
|
||||
* Endpoints de administración de configuración.
|
||||
*
|
||||
* Protegidos con requireAdmin (rol === 'admin') excepto /acciones que
|
||||
* cualquiera autenticado puede consultar.
|
||||
* Protegidos con requireAdmin (admin o manager) excepto /acciones que
|
||||
* cualquiera autenticado puede consultar. Las operaciones sensibles —crear
|
||||
* usuarios y editar permisos de roles— usan requireAdminEstricto (solo admin):
|
||||
* el rol manager no las puede hacer.
|
||||
*/
|
||||
import type { NextFunction, Request, Response } from 'express'
|
||||
import { z } from 'zod'
|
||||
import * as configService from '../services/config.service.js'
|
||||
import { esRolValido } from '../config/roles.js'
|
||||
import { esAdmin, esAdminOManager } from '../utils/roles.js'
|
||||
import { AppError, BadRequestError } from '../utils/errors.js'
|
||||
|
||||
// ── Middleware admin ────────────────────────────────────────────────────
|
||||
|
||||
export function requireAdmin(req: Request, _res: Response, next: NextFunction): void {
|
||||
if (req.usuarioToken?.rol !== 'admin') {
|
||||
throw new AppError(403, 'Se requiere rol admin')
|
||||
if (!esAdminOManager(req.usuarioToken?.rol)) {
|
||||
throw new AppError(403, 'Se requiere rol admin o manager')
|
||||
}
|
||||
next()
|
||||
}
|
||||
|
||||
/** Solo admin: crear usuarios y editar permisos de roles (manager NO) */
|
||||
export function requireAdminEstricto(req: Request, _res: Response, next: NextFunction): void {
|
||||
if (!esAdmin(req.usuarioToken?.rol)) {
|
||||
throw new AppError(403, 'Solo un administrador puede hacer esta operación')
|
||||
}
|
||||
next()
|
||||
}
|
||||
@@ -86,6 +97,10 @@ export async function actualizarUsuarioEndpoint(req: Request, res: Response): Pr
|
||||
const id = req.params.id as string
|
||||
if (!id) throw new BadRequestError('Falta el parámetro :id')
|
||||
const parsed = actualizarUsuarioSchema.parse(req.body)
|
||||
// El rol es un permiso: solo el administrador puede cambiarlo (manager no)
|
||||
if (parsed.rol !== undefined && !esAdmin(req.usuarioToken?.rol)) {
|
||||
throw new AppError(403, 'Solo un administrador puede cambiar el rol de un usuario')
|
||||
}
|
||||
// Filtra undefined para enviar solo campos con valor
|
||||
const body: { rol?: string; asignacion?: string | null; activo?: boolean } = {}
|
||||
if (parsed.rol !== undefined) body.rol = parsed.rol
|
||||
|
||||
Reference in New Issue
Block a user