// ────────────────────────────────────────────────────────────────── // sesion.jsx — quién es el usuario actual. Lo necesitan TODOS los módulos. // // Antes esto vivía dentro de cruds-usuarios.jsx, la ventana de administración de // usuarios. Eso obligaba a que Agencia y Comercial cargaran esa ventana entera — // con sus CRUD de roles y módulos— sólo para saber quién está usando el sistema. // Es el caso de manual de la regla: cuando dos módulos necesitan un dato, se saca // el DATO a la librería, no se adopta la ventana que lo tenía adentro. // // No hay autenticación real: "iniciar sesión" es elegir quién eres, igual que hoy. // La sesión NO es una tabla —no viaja en el bootstrap— y vive sólo en este // navegador. Como los nueve servicios están detrás de un mismo hostname, // localStorage es compartido y la elección hecha en la portada la ven todos. // // Publica window.SCAuth. // ────────────────────────────────────────────────────────────────── (function () { "use strict"; const { read, write, nextId } = window.SCUI; // Las tablas de las que sale la persona y sus roles. const KEYS = { USERS: "sc.usr_usuario", ROLES: "sc.usr_rol", UR: "sc.usr_usuario_rol", }; // No está en __SC_KEYS a propósito: no es una tabla, es de este navegador. const SESSION_KEY = "sc.current_user"; function currentUserId() { try { return localStorage.getItem(SESSION_KEY); } catch (e) { return null; } } function setCurrentUserId(v) { try { if (v == null || v === "") localStorage.removeItem(SESSION_KEY); else localStorage.setItem(SESSION_KEY, v); } catch (e) {} } function currentUser() { const id = currentUserId(); if (!id) return null; return read(KEYS.USERS).find((u) => u.id === id) || null; } function defaultUser() { const us = read(KEYS.USERS); return us.find((u) => u.activo !== false) || us[0] || null; } function userFullName(u) { return ((u && u.nombre || "") + " " + (u && u.apellido || "")).trim(); } function userInitials(u) { if (!u) return "?"; const s = ((u.nombre || "").charAt(0) + (u.apellido || "").charAt(0)).toUpperCase(); return s || (u.email || "?").charAt(0).toUpperCase(); } function rolesDeUsuario(userId) { const ids = read(KEYS.UR).filter((x) => x.id_usuario === userId).map((x) => x.id_rol); return read(KEYS.ROLES).filter((r) => ids.indexOf(r.id) !== -1); } // Quién dice el navegador que está escribiendo. Va en cada escritura para que // el servidor pueda estampar el autor del cambio: hoy nadie sabe quién tocó qué. // No es una credencial y no pretende serlo — es la misma confianza que ya existe. function cabeceras() { const u = currentUser(); if (!u) return {}; return { "X-SC-Usuario": u.email || u.id }; } window.SCAuth = { KEYS, SESSION_KEY, read, write, nextId, currentUserId, setCurrentUserId, currentUser, defaultUser, userFullName, userInitials, rolesDeUsuario, cabeceras, }; })();