{"id":1041,"date":"2026-08-20T09:58:29","date_gmt":"2026-08-20T14:58:29","guid":{"rendered":"https:\/\/nucleo.miespaciodigital.net\/?page_id=1041"},"modified":"2026-08-20T09:59:47","modified_gmt":"2026-08-20T14:59:47","slug":"usuarios-y-accesos","status":"publish","type":"page","link":"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/usuarios-y-accesos\/","title":{"rendered":"Usuarios y Accesos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1041\" class=\"elementor elementor-1041\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-158bd6e e-con e-atomic-element e-flexbox-base e-dc19bbf \" data-id=\"158bd6e\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"158bd6e\" data-e-type=\"e-flexbox\" data-id=\"158bd6e\">\n    <div class=\"elementor-element elementor-element-32463ff e-con e-atomic-element e-flexbox-base \" data-id=\"32463ff\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"32463ff\" data-e-type=\"e-flexbox\" data-id=\"32463ff\">\n    \t\t<div class=\"elementor-element elementor-element-24cca97 elementor-widget elementor-widget-html\" data-id=\"24cca97\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>N\u00facleo \u2014 Usuarios y Accesos<\/title>\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n  :root{\r\n    --ink:#132029; --ink-soft:#3d4d55;\r\n    --paper:#F4F2EC; --paper-raised:#FFFFFF; --line:#DDD8CB;\r\n    --navy:#12303D; --navy-soft:#1C3E4E;\r\n    --gold:#C98A3B; --gold-soft:#E8C899;\r\n    --green:#3A7D57; --green-bg:#E4EEE6;\r\n    --amber:#B8862F; --amber-bg:#F2E9D6;\r\n    --red:#B4432B; --red-bg:#F3E1DB;\r\n    --radius:14px;\r\n    --shadow: 0 1px 2px rgba(19,32,41,0.06), 0 8px 24px -12px rgba(19,32,41,0.18);\r\n  }\r\n  *{box-sizing:border-box;}\r\n  html,body{margin:0;padding:0;}\r\n  body{background:var(--paper); color:var(--ink); font-family:'IBM Plex Sans', sans-serif; -webkit-font-smoothing:antialiased;}\r\n  .app{display:grid; grid-template-columns:260px 1fr; min-height:100vh;}\r\n\r\n  .sidebar{background:var(--navy); color:#EDEBE2; padding:28px 20px 20px; display:flex; flex-direction:column; gap:28px;}\r\n  .brand{display:flex; align-items:center; gap:10px;}\r\n  .brand-mark{width:34px;height:34px;border-radius:50%; background:radial-gradient(circle at 35% 30%, var(--gold-soft), var(--gold) 60%); box-shadow: inset 0 0 0 2px rgba(255,255,255,0.25); flex-shrink:0;}\r\n  .brand-name{font-family:'Fraunces', serif; font-weight:600; font-size:1.25rem;}\r\n  .brand-sub{font-size:0.7rem; color:#9FB2BC; letter-spacing:0.06em; text-transform:uppercase; margin-top:-22px; margin-left:44px;}\r\n  nav{display:flex;flex-direction:column;gap:2px;margin-top:6px;}\r\n  .nav-item{display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:8px; font-size:0.87rem; color:#C7D3D8; text-decoration:none; cursor:pointer; transition:background 0.15s ease, color 0.15s ease;}\r\n  .nav-item .num{font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color:#7C929B; width:16px;}\r\n  .nav-item:hover{background:rgba(255,255,255,0.06); color:#fff;}\r\n  .nav-item.active{background:var(--navy-soft); color:#fff; box-shadow: inset 3px 0 0 var(--gold);}\r\n  .nav-item.active .num{color:var(--gold);}\r\n  .nav-sub{margin-left:26px; display:flex; flex-direction:column; gap:1px;}\r\n  .nav-sub .nav-item{font-size:0.8rem; padding:7px 12px; color:#9FB2BC;}\r\n  .nav-sub .nav-item.active{color:#fff;}\r\n  .sidebar-footer{margin-top:auto; font-size:0.72rem; color:#7C929B; padding-top:16px; border-top:1px solid rgba(255,255,255,0.1);}\r\n\r\n  main{padding:32px 40px 60px; max-width:1260px;}\r\n  .topbar{display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:22px; flex-wrap:wrap; gap:16px;}\r\n  .eyebrow{font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--gold); margin-bottom:6px;}\r\n  h1{font-family:'Fraunces', serif; font-weight:600; font-size:2rem; margin:0; color:var(--navy);}\r\n  .subtitle{color:var(--ink-soft); font-size:0.95rem; margin-top:6px;}\r\n  .user-chip{display:flex; align-items:center; gap:10px; background:var(--paper-raised); border:1px solid var(--line); border-radius:999px; padding:6px 14px 6px 6px; box-shadow:var(--shadow);}\r\n  .user-avatar{width:30px;height:30px;border-radius:50%; background:var(--navy); color:#EDEBE2; display:flex;align-items:center;justify-content:center; font-size:0.75rem;font-weight:600; font-family:'IBM Plex Mono',monospace;}\r\n  .user-chip .name{font-size:0.82rem;font-weight:500;}\r\n  .user-chip .role{font-size:0.72rem;color:var(--ink-soft);}\r\n\r\n  .summary-strip{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:22px;}\r\n  .kpi-card{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); padding:18px 20px; box-shadow:var(--shadow); position:relative; overflow:hidden;}\r\n  .kpi-card::before{content:\"\"; position:absolute; top:0; left:0; right:0; height:3px; background:var(--navy);}\r\n  .kpi-label{font-size:0.74rem; color:var(--ink-soft); margin-bottom:6px;}\r\n  .kpi-value{font-family:'Fraunces', serif; font-size:1.8rem; font-weight:600; color:var(--navy);}\r\n\r\n  .toolbar{display:flex; gap:12px; align-items:center; margin-bottom:16px; flex-wrap:wrap;}\r\n  .search-box{flex:1; min-width:220px; display:flex; align-items:center; gap:8px; background:var(--paper-raised); border:1px solid var(--line); border-radius:10px; padding:10px 14px;}\r\n  .search-box input{border:none; outline:none; background:transparent; font-family:'IBM Plex Sans', sans-serif; font-size:0.88rem; color:var(--ink); width:100%;}\r\n  .search-box svg{flex-shrink:0; color:var(--ink-soft);}\r\n  .btn-new{margin-left:auto; font-family:'IBM Plex Sans', sans-serif; font-size:0.85rem; font-weight:600; padding:10px 18px; border-radius:10px; border:none; background:var(--navy); color:#fff; cursor:pointer;}\r\n\r\n  .form-panel{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); padding:24px; margin-bottom:22px; display:none;}\r\n  .form-panel.open{display:block;}\r\n  .form-panel h3{font-family:'Fraunces', serif; font-size:1.1rem; color:var(--navy); margin:0 0 16px;}\r\n  .form-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px;}\r\n  .form-field{display:flex; flex-direction:column; gap:6px;}\r\n  .form-field label{font-size:0.74rem; font-weight:600; color:var(--ink-soft); text-transform:uppercase; letter-spacing:0.03em;}\r\n  .form-field select, .form-field input{border:1px solid var(--line); border-radius:8px; padding:10px 12px; font-family:'IBM Plex Sans', sans-serif; font-size:0.86rem; color:var(--ink); background:var(--paper-raised);}\r\n  .form-actions{display:flex; gap:10px; justify-content:flex-end;}\r\n  .btn{font-family:'IBM Plex Sans', sans-serif; font-size:0.82rem; font-weight:600; padding:10px 16px; border-radius:9px; border:1px solid var(--navy); background:var(--navy); color:#fff; cursor:pointer;}\r\n  .btn.secondary{background:transparent; color:var(--navy);}\r\n\r\n  .panel{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); overflow:hidden; margin-bottom:26px;}\r\n  .panel-title{font-family:'Fraunces', serif; font-size:1.05rem; color:var(--navy); font-weight:600; padding:20px 24px 4px;}\r\n  .panel-sub{font-size:0.8rem; color:var(--ink-soft); padding:0 24px 14px;}\r\n  table{width:100%; border-collapse:collapse;}\r\n  thead th{text-align:left; font-size:0.68rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--ink-soft); padding:12px 20px; border-bottom:1px solid var(--line); background:#FAF9F5;}\r\n  tbody td{padding:12px 20px; font-size:0.83rem; border-bottom:1px solid var(--line); vertical-align:middle;}\r\n  tbody tr:last-child td{border-bottom:none;}\r\n  .user-cell{display:flex; align-items:center; gap:10px;}\r\n  .user-avatar-sm{width:32px;height:32px;border-radius:50%; background:var(--navy); color:#EDEBE2; display:flex;align-items:center;justify-content:center; font-size:0.7rem;font-weight:600; font-family:'IBM Plex Mono',monospace; flex-shrink:0;}\r\n  .user-name{font-weight:500;}\r\n  .user-cargo{font-size:0.72rem; color:var(--ink-soft); margin-top:2px;}\r\n  .role-pill{font-size:0.72rem; font-weight:600; padding:4px 10px; border-radius:999px;}\r\n  .role-pill.admin{background:var(--gold-soft); color:var(--navy);}\r\n  .role-pill.editor{background:var(--blue-bg,#DCE7EE); color:#2E5C7A;}\r\n  .role-pill.lectura{background:#EFEDE4; color:var(--ink-soft);}\r\n  .status-pill{display:inline-flex; align-items:center; gap:6px; font-size:0.72rem; font-weight:600; padding:4px 10px; border-radius:999px;}\r\n  .status-pill.activo{background:var(--green-bg); color:var(--green);}\r\n  .status-pill.inactivo{background:var(--red-bg); color:var(--red);}\r\n\r\n  .matrix-table th, .matrix-table td{text-align:center;}\r\n  .matrix-table th.mod-col, .matrix-table td.mod-col{text-align:left;}\r\n  .check{color:var(--green); font-weight:700;}\r\n  .dash{color:var(--line);}\r\n\r\n  .demo-note{margin-top:20px; font-size:0.78rem; color:var(--ink-soft); text-align:center; padding:14px; border:1px dashed var(--line); border-radius:10px; background:rgba(201,138,59,0.05);}\r\n\r\n  @media (max-width:980px){\r\n    .app{grid-template-columns:1fr;}\r\n    .sidebar{display:none;}\r\n    .summary-strip{grid-template-columns:repeat(2,1fr);}\r\n    .form-grid{grid-template-columns:1fr;}\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"app\">\r\n\r\n  <aside class=\"sidebar\">\r\n    <div>\r\n      <div class=\"brand\"><div class=\"brand-mark\"><\/div><div class=\"brand-name\">N\u00facleo<\/div><\/div>\r\n      <div class=\"brand-sub\">Gesti\u00f3n Digital<\/div>\r\n    <\/div>\r\n    <nav>\r\n      <a class=\"nav-item\"><span class=\"num\">01<\/span> Tablero General<\/a>\r\n      <a class=\"nav-item\"><span class=\"num\">02<\/span> Atenci\u00f3n Ciudadana<\/a>\r\n      <a class=\"nav-item\"><span class=\"num\">03<\/span> Asistente Interno (IA)<\/a>\r\n      <a class=\"nav-item\"><span class=\"num\">04<\/span> Gesti\u00f3n por Resultados<\/a>\r\n      <a class=\"nav-item\"><span class=\"num\">05<\/span> Planeamiento y Presupuesto<\/a>\r\n      <a class=\"nav-item\"><span class=\"num\">06<\/span> Auditor\u00eda y Control<\/a>\r\n      <a class=\"nav-item\"><span class=\"num\">07<\/span> Informes y Rendici\u00f3n<\/a>\r\n      <a class=\"nav-item active\"><span class=\"num\">08<\/span> Configuraci\u00f3n<\/a>\r\n      <div class=\"nav-sub\">\r\n        <a class=\"nav-item\">Estructura Org\u00e1nica (ROF)<\/a>\r\n        <a class=\"nav-item active\">Usuarios y Accesos<\/a>\r\n        <a class=\"nav-item\">Par\u00e1metros del Sistema<\/a>\r\n      <\/div>\r\n      <a class=\"nav-item\"><span class=\"num\">09<\/span> Ayuda y Soporte<\/a>\r\n    <\/nav>\r\n    <div class=\"sidebar-footer\">Organismo de Gobierno de Ejemplo<br>Sesi\u00f3n de demostraci\u00f3n<\/div>\r\n  <\/aside>\r\n\r\n  <main>\r\n    <div class=\"topbar\">\r\n      <div>\r\n        <div class=\"eyebrow\">Configuraci\u00f3n<\/div>\r\n        <h1>Usuarios y Accesos<\/h1>\r\n        <div class=\"subtitle\">Cada usuario hereda su cargo desde el Job Description (MOF) y su acceso desde la estructura del ROF<\/div>\r\n      <\/div>\r\n      <div class=\"user-chip\">\r\n        <div class=\"user-avatar\">DM<\/div>\r\n        <div><div class=\"name\">Demo institucional<\/div><div class=\"role\">Gerente General<\/div><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"summary-strip\">\r\n      <div class=\"kpi-card\"><div class=\"kpi-label\">Usuarios registrados<\/div><div class=\"kpi-value\" id=\"kpiTotal\">\u2014<\/div><\/div>\r\n      <div class=\"kpi-card\"><div class=\"kpi-label\">Administradores<\/div><div class=\"kpi-value\" id=\"kpiAdmin\">\u2014<\/div><\/div>\r\n      <div class=\"kpi-card\"><div class=\"kpi-label\">Activos<\/div><div class=\"kpi-value\" id=\"kpiActivos\">\u2014<\/div><\/div>\r\n      <div class=\"kpi-card\"><div class=\"kpi-label\">Inactivos<\/div><div class=\"kpi-value\" id=\"kpiInactivos\">\u2014<\/div><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"toolbar\">\r\n      <div class=\"search-box\">\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\r\n        <input id=\"searchInput\" type=\"text\" placeholder=\"Buscar por nombre, cargo o gerencia...\">\r\n      <\/div>\r\n      <button class=\"btn-new\" onclick=\"toggleForm()\">+ Nuevo usuario<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"form-panel\" id=\"formPanel\">\r\n      <h3>Registrar nuevo usuario<\/h3>\r\n      <div class=\"form-grid\">\r\n        <div class=\"form-field\"><label>Nombre completo<\/label><input type=\"text\" id=\"fNombre\" placeholder=\"Ej: Luis Rojas Mendoza\"><\/div>\r\n        <div class=\"form-field\">\r\n          <label>Cargo (MOF)<\/label>\r\n          <select id=\"fCargo\">\r\n            <option>MOF 4.2.1 \u2014 Gerente de Servicios P\u00fablicos<\/option>\r\n            <option>MOF 5.1.3 \u2014 Sub Gerente de Serenazgo<\/option>\r\n            <option>MOF 2.1.1 \u2014 Gerente de Recursos Humanos<\/option>\r\n            <option>MOF 2.3.1 \u2014 Gerente de Tecnolog\u00edas de la Informaci\u00f3n<\/option>\r\n            <option>MOF 3.1.1 \u2014 Gerente de Infraestructura<\/option>\r\n            <option>MOF 4.1.1 \u2014 Gerente de Desarrollo Social<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div class=\"form-field\">\r\n          <label>Rol de acceso<\/label>\r\n          <select id=\"fRol\">\r\n            <option value=\"admin\">Administrador<\/option>\r\n            <option value=\"editor\" selected>Editor<\/option>\r\n            <option value=\"lectura\">Solo lectura<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div class=\"form-field\"><label>Correo institucional<\/label><input type=\"email\" id=\"fCorreo\" placeholder=\"usuario@organismo de gobierno.gob.pe\"><\/div>\r\n      <\/div>\r\n      <div class=\"form-actions\">\r\n        <button class=\"btn secondary\" onclick=\"toggleForm()\">Cancelar<\/button>\r\n        <button class=\"btn\" onclick=\"registrarUsuario()\">Registrar usuario<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Usuarios del sistema<\/div>\r\n      <div class=\"panel-sub\">Cada uno con su rol de acceso y estado<\/div>\r\n      <table>\r\n        <thead><tr><th>Usuario<\/th><th>Cargo<\/th><th>Rol de acceso<\/th><th>\u00daltimo acceso<\/th><th>Estado<\/th><\/tr><\/thead>\r\n        <tbody id=\"userBody\"><\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Matriz de permisos por rol<\/div>\r\n      <div class=\"panel-sub\">Qu\u00e9 puede hacer cada tipo de usuario en cada m\u00f3dulo<\/div>\r\n      <table class=\"matrix-table\">\r\n        <thead><tr><th class=\"mod-col\">M\u00f3dulo<\/th><th>Administrador<\/th><th>Editor<\/th><th>Solo lectura<\/th><\/tr><\/thead>\r\n        <tbody id=\"matrixBody\"><\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <div class=\"demo-note\">\r\n      Prototipo de demostraci\u00f3n \u2014 los usuarios y permisos son de ejemplo. En la versi\u00f3n con backend real, el acceso se valida contra la base de datos institucional.\r\n    <\/div>\r\n  <\/main>\r\n<\/div>\r\n\r\n<script>\r\nlet usuarios = [\r\n  {nombre:\"Demo institucional\", cargo:\"Gerente General\", rol:\"admin\", correo:\"gerencia@organismo de gobierno.gob.pe\", ultimoAcceso:\"Hoy, 10:42 a.m.\", estado:\"activo\"},\r\n  {nombre:\"Rosa Medina Quispe\", cargo:\"MOF 4.2.1 \u2014 Gerente de Servicios P\u00fablicos\", rol:\"editor\", correo:\"r.medina@organismo de gobierno.gob.pe\", ultimoAcceso:\"Hoy, 09:15 a.m.\", estado:\"activo\"},\r\n  {nombre:\"Carlos Huam\u00e1n R\u00edos\", cargo:\"MOF 5.1.3 \u2014 Sub Gerente de Serenazgo\", rol:\"editor\", correo:\"c.huaman@organismo de gobierno.gob.pe\", ultimoAcceso:\"Ayer, 16:30\", estado:\"activo\"},\r\n  {nombre:\"Ana Beltr\u00e1n Cusi\", cargo:\"MOF 2.1.1 \u2014 Gerente de Recursos Humanos\", rol:\"editor\", correo:\"a.beltran@organismo de gobierno.gob.pe\", ultimoAcceso:\"18 ago 2026\", estado:\"activo\"},\r\n  {nombre:\"Miguel Torres Salas\", cargo:\"MOF 2.3.1 \u2014 Gerente de Tecnolog\u00edas de la Informaci\u00f3n\", rol:\"admin\", correo:\"m.torres@organismo de gobierno.gob.pe\", ultimoAcceso:\"Hoy, 08:50 a.m.\", estado:\"activo\"},\r\n  {nombre:\"Luz Fern\u00e1ndez Paredes\", cargo:\"Asistente \u2014 Mesa de Partes\", rol:\"lectura\", correo:\"l.fernandez@organismo de gobierno.gob.pe\", ultimoAcceso:\"15 ago 2026\", estado:\"inactivo\"}\r\n];\r\n\r\nfunction roleLabel(r){ return r===\"admin\" ? \"Administrador\" : r===\"editor\" ? \"Editor\" : \"Solo lectura\"; }\r\nfunction initials(name){ return name.split(\" \").slice(0,2).map(w=>w[0]).join(\"\").toUpperCase(); }\r\n\r\nfunction renderUsers(){\r\n  const q = document.getElementById(\"searchInput\").value.trim().toLowerCase();\r\n  const filtered = usuarios.filter(u => (u.nombre+\" \"+u.cargo).toLowerCase().includes(q));\r\n  document.getElementById(\"userBody\").innerHTML = filtered.map(u => `\r\n    <tr>\r\n      <td><div class=\"user-cell\"><div class=\"user-avatar-sm\">${initials(u.nombre)}<\/div><div><div class=\"user-name\">${u.nombre}<\/div><\/div><\/div><\/td>\r\n      <td>${u.cargo}<\/td>\r\n      <td><span class=\"role-pill ${u.rol}\">${roleLabel(u.rol)}<\/span><\/td>\r\n      <td>${u.ultimoAcceso}<\/td>\r\n      <td><span class=\"status-pill ${u.estado}\">${u.estado === \"activo\" ? \"Activo\" : \"Inactivo\"}<\/span><\/td>\r\n    <\/tr>\r\n  `).join(\"\");\r\n\r\n  document.getElementById(\"kpiTotal\").textContent = usuarios.length;\r\n  document.getElementById(\"kpiAdmin\").textContent = usuarios.filter(u=>u.rol===\"admin\").length;\r\n  document.getElementById(\"kpiActivos\").textContent = usuarios.filter(u=>u.estado===\"activo\").length;\r\n  document.getElementById(\"kpiInactivos\").textContent = usuarios.filter(u=>u.estado===\"inactivo\").length;\r\n}\r\n\r\nconst modulos = [\r\n  \"Tablero General\",\"Atenci\u00f3n Ciudadana\",\"Asistente Interno (IA)\",\"Gesti\u00f3n por Resultados\",\r\n  \"Planeamiento y Presupuesto\",\"Auditor\u00eda y Control\",\"Informes y Rendici\u00f3n\",\"Bienes y Activos\",\"Configuraci\u00f3n\"\r\n];\r\nconst permisos = {\r\n  admin:   [1,1,1,1,1,1,1,1,1],\r\n  editor:  [1,1,1,1,1,0,1,1,0],\r\n  lectura: [1,0,1,1,1,1,1,1,0]\r\n};\r\n\r\nfunction renderMatrix(){\r\n  document.getElementById(\"matrixBody\").innerHTML = modulos.map((m,i) => `\r\n    <tr>\r\n      <td class=\"mod-col\">${m}<\/td>\r\n      <td>${permisos.admin[i] ? '<span class=\"check\">\u2713<\/span>' : '<span class=\"dash\">\u2014<\/span>'}<\/td>\r\n      <td>${permisos.editor[i] ? '<span class=\"check\">\u2713<\/span>' : '<span class=\"dash\">\u2014<\/span>'}<\/td>\r\n      <td>${permisos.lectura[i] ? '<span class=\"check\">\u2713<\/span>' : '<span class=\"dash\">\u2014<\/span>'}<\/td>\r\n    <\/tr>\r\n  `).join(\"\");\r\n}\r\n\r\ndocument.getElementById(\"searchInput\").addEventListener(\"input\", renderUsers);\r\n\r\nfunction toggleForm(){ document.getElementById(\"formPanel\").classList.toggle(\"open\"); }\r\n\r\nfunction registrarUsuario(){\r\n  const nombre = document.getElementById(\"fNombre\").value.trim();\r\n  if(!nombre){ alert(\"Escribe el nombre del usuario.\"); return; }\r\n  usuarios.push({\r\n    nombre, cargo: document.getElementById(\"fCargo\").value,\r\n    rol: document.getElementById(\"fRol\").value,\r\n    correo: document.getElementById(\"fCorreo\").value || \"\u2014\",\r\n    ultimoAcceso: \"Nunca\", estado: \"activo\"\r\n  });\r\n  document.getElementById(\"fNombre\").value = \"\";\r\n  document.getElementById(\"fCorreo\").value = \"\";\r\n  toggleForm();\r\n  renderUsers();\r\n}\r\n\r\nrenderUsers();\r\nrenderMatrix();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>N\u00facleo \u2014 Usuarios y Accesos N\u00facleo Gesti\u00f3n Digital 01 Tablero General 02 Atenci\u00f3n Ciudadana 03 Asistente Interno (IA) 04 Gesti\u00f3n por Resultados 05 Planeamiento y Presupuesto 06 Auditor\u00eda y Control 07 Informes y Rendici\u00f3n 08 Configuraci\u00f3n Estructura Org\u00e1nica (ROF) Usuarios y Accesos Par\u00e1metros del Sistema 09 Ayuda y Soporte Organismo de Gobierno de EjemploSesi\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":638,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-1041","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/1041","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/comments?post=1041"}],"version-history":[{"count":4,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/1041\/revisions"}],"predecessor-version":[{"id":1046,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/1041\/revisions\/1046"}],"up":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/638"}],"wp:attachment":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/media?parent=1041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}