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.
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": {
".read": true,
".write": "auth != null && root.child('admin/profesores/'+auth.uid+'/materia').val() === $materia"
},
"calificaciones": {
"$uid": {
".read": "auth.uid === $uid || auth != null",
".write": "auth != null"
}
},
"asistencias": {
".read": "auth != null",
".write": "auth != null"
},
"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
- Ve a la Consola Firebase → Authentication → Users
- Localiza tu correo de administrador
- Copia el valor de la columna User UID
- Reemplaza
'UID_ADMIN_AQUI' en las reglas de Nivel 2
- Ve a Realtime Database → Rules → pega y publica