Dashboard

Vista General

Resumen de actividad en todas las plataformas

Plataformas
Activas en Firebase
Profesores
Registrados
Alumnos
Total inscritos
Actividades
Publicadas
Plataformas — Estado Firebase
MateriaClave DBEstado
Actividad Reciente
Cargando actividad...

Plataformas

Gestión de materias y plataformas educativas

Profesores

Gestión de cuentas docentes

NombreEmailMateriaParcial ActivoEstadoAcciones
Cargando...

Alumnos

Todos los alumnos inscritos en el sistema

NombreUsuarioMateriaParcialAsistenciasCalificaciónAcciones
Selecciona una materia.

Actividades

Control de actividades por materia y parcial

TítuloTipoParcialFechaEstadoAcciones
Selecciona una materia.

Foros

Moderación de foros por materia

MateriaTemaAutorRespuestasFechaAcciones
Cargando foros...

Estructura Firebase

Organización recomendada de la base de datos

Estructura Actual vs Recomendada
⚠ Actual (plana)
foro-ee8a5-default-rtdb ├── forum ├── hacking ├── informatica2 ├── informatica2v2 ├── milestone └── pedagogia
✓ Recomendada (estructurada)
foro-ee8a5-default-rtdb ├── admin │ ├── profesores │ └── configuracion ├── plataformas │ ├── ingles (milestone) │ ├── hacking │ ├── informatica2 │ ├── informatica2v2 │ └── pedagogia │ ├── alumnos │ ├── actividades │ ├── asistencias │ ├── calificaciones │ └── foros └── _meta ├── version └── ultimo_backup
Script de Migración — Ejecutar una sola vez

Copia los datos actuales a la nueva estructura sin eliminar los originales. Verifica en Firebase antes de borrar.

// Ejecuta en la consola del navegador con Firebase cargado const db = firebase.database(); const mapping = { milestone: 'plataformas/ingles', hacking: 'plataformas/hacking', informatica2: 'plataformas/informatica2', informatica2v2:'plataformas/informatica2v2', pedagogia: 'plataformas/pedagogia', forum: 'plataformas/foro_general' }; Object.entries(mapping).forEach(async ([src, dst]) => { const snap = await db.ref(src).once('value'); if(snap.exists()) await db.ref(dst).set(snap.val()); console.log(`✓ Migrado: ${src} → ${dst}`); });

Reglas de Seguridad

Firebase Realtime Database Rules — configuración recomendada

Nivel 1 — Solo Lectura Pública Mínimo recomendado

Alumnos pueden leer; solo usuarios autenticados pueden escribir. Ideal para plataformas donde el alumno no necesita cuenta.

{ "rules": { "plataformas": { "$materia": { ".read": true, ".write": "auth != null" } }, "admin": { ".read": "auth != null", ".write": "auth != null" } } }
Nivel 2 — Roles por UID Recomendado actual

El administrador tiene acceso total. Los profesores solo escriben en su materia. Los alumnos solo leen y escriben su propio progreso.

{ "rules": { "admin": { ".read": "auth.uid === 'UID_ADMIN_AQUI'", ".write": "auth.uid === 'UID_ADMIN_AQUI'" }, "plataformas": { "$materia": { // Actividades y config: solo profesor de la materia "actividades": { ".read": true, ".write": "auth != null && root.child('admin/profesores/'+auth.uid+'/materia').val() === $materia" }, // Calificaciones: alumno lee las suyas, prof escribe "calificaciones": { "$uid": { ".read": "auth.uid === $uid || auth != null", ".write": "auth != null" } }, // Asistencias: igual que calificaciones "asistencias": { ".read": "auth != null", ".write": "auth != null" }, // Foros: cualquiera lee, auth escribe "foros": { ".read": true, ".write": "auth != null" } } } } }
Nivel 3 — Validación de Datos Avanzado

Valida que los datos escritos tengan la estructura correcta. Previene datos corruptos y ataques de inyección.

{ "rules": { "plataformas": { "$materia": { "alumnos": { "$uid": { ".validate": "newData.hasChildren(['nombre','usuario','parcial'])", "nombre": { ".validate": "newData.isString() && newData.val().length > 2" }, "usuario": { ".validate": "newData.isString()" }, "parcial": { ".validate": "newData.isNumber() && newData.val() >= 1 && newData.val() <= 3" } } }, "actividades": { "$actId": { ".validate": "newData.hasChildren(['titulo','tipo','parcial','fecha'])" } } } } } }
Cómo obtener tu UID de Administrador
  1. Ve a la Consola Firebase → Authentication → Users
  2. Localiza tu correo de administrador
  3. Copia el valor de la columna User UID
  4. Reemplaza 'UID_ADMIN_AQUI' en las reglas de Nivel 2
  5. Ve a Realtime Database → Rules → pega y publica