Files
FRASA-CAS/api-gateway/src/config/acciones.ts

91 lines
3.0 KiB
TypeScript

// Catálogo de acciones granulares disponibles por rol.
// Cada acción controla un permiso específico en la UI y el backend.
export const ACCIONES_DISPONIBLES = [
{ clave: 'descartar_lead', nombre: 'Descartar leads', descripcion: 'Puede descartar leads con motivo' },
{ clave: 'editar_cotizacion', nombre: 'Editar cotizaciones', descripcion: 'Puede editar cotizaciones existentes' },
{ clave: 'asignar_vendedor', nombre: 'Reasignar leads', descripcion: 'Puede reasignar leads a otros vendedores' },
{ clave: 'ver_reportes', nombre: 'Ver reportes', descripcion: 'Puede ver dashboards y reportes' },
{ clave: 'exportar_pdf', nombre: 'Exportar PDFs', descripcion: 'Puede generar y descargar PDFs' },
{ clave: 'ver_precios', nombre: 'Ver precios completos', descripcion: 'Puede ver precios y descuentos en cotizador' },
{ clave: 'gestionar_clientes', nombre: 'Gestionar clientes', descripcion: 'Puede gestionar fichas de clientes' },
] as const
export type AccionClave = (typeof ACCIONES_DISPONIBLES)[number]['clave']
// Acciones por defecto por rol: true = habilitado, false = deshabilitado.
// 'admin' tiene todo habilitado por convención.
export const ACCIONES_POR_ROL_DEFAULT: Record<string, Record<AccionClave, boolean>> = {
vendedor: {
descartar_lead: true,
editar_cotizacion: false,
asignar_vendedor: false,
ver_reportes: false,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: false,
},
administracion_venta: {
descartar_lead: true,
editar_cotizacion: true,
asignar_vendedor: false,
ver_reportes: true,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: true,
},
director_ventas: {
descartar_lead: true,
editar_cotizacion: true,
asignar_vendedor: true,
ver_reportes: true,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: true,
},
escrituracion: {
descartar_lead: false,
editar_cotizacion: false,
asignar_vendedor: false,
ver_reportes: false,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: true,
},
direccion_general: {
descartar_lead: false,
editar_cotizacion: false,
asignar_vendedor: false,
ver_reportes: true,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: false,
},
admin: {
descartar_lead: true,
editar_cotizacion: true,
asignar_vendedor: true,
ver_reportes: true,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: true,
},
// manager: mismas acciones operativas que admin (no gestiona usuarios/permisos,
// eso se controla por endpoint, no por acción)
manager: {
descartar_lead: true,
editar_cotizacion: true,
asignar_vendedor: true,
ver_reportes: true,
exportar_pdf: true,
ver_precios: true,
gestionar_clientes: true,
},
}
/** Devuelve las acciones de un rol (o vacío si el rol no existe) */
export function accionesPorRol(rol: string): Record<AccionClave, boolean> {
const clave = rol.trim().toLowerCase()
return (ACCIONES_POR_ROL_DEFAULT[clave] ?? ACCIONES_POR_ROL_DEFAULT.vendedor)!
}